Добрый день. Появилась у меня задача последовательно запускать Thread процессы. При этом основная программа не должна ждать выполнения чего-либо: отдала команду запустить, скажем 2 процесса и продолжает работу, а процессы уже сами должны выполняться один за другим.
Поскольку на Java в последние годы пишу спорадически, пришлось поискать в сети решение поэлегантнее. Одно из http://stackoverflow.com/questions/289434/how-to-make-a-java-thread-wait-for-another-threads-output мне понравилось и написал я такой код:
| Код | import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;
public class TestThreads {
public static void main(String[] args) { ExecutorService pool = Executors.newFixedThreadPool(2);
try { System.out.println("-0-"); pool.submit(new TestCallable("C1")).get(); System.out.println("-1-"); pool.submit(new TestCallable("C2")).get(); System.out.println("-2-"); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } System.exit(0); }
}
|
В качестве процессов вызываются объекты такого класса:
| Код | import java.util.concurrent.Callable;
public class TestCallable implements Callable<Boolean> { private String str; public TestCallable(String str){ this.str = str; } @Override public Boolean call() throws Exception { System.out.println(str + " START"); Thread.sleep(2000); System.out.println(str + " STOP"); return true; } }
|
В результате все работает последовательно, но основной процесс main ждет окончания выполнения Thread-ов. Т.е. никакой параллелизации не получается и результат работы программы
| Код | -0- C1 START C1 STOP -1- C2 START C2 STOP -2-
|
- Вопрос 1: Что я не так делаю, что не параллелизирует выполнение?
- Вопрос 2: Результат не зависит от того какое число я ставлю аргументом: Executors.newFixedThreadPool(1) или Executors.newFixedThreadPool(2). Мне казалось, что этот аргумент должен влиять именно на ход основной программы. В чем я запутался?
Спасибо!
|