Почему поток при весенней загрузке с использованием ExecutorCompletionService не запускается параллельно? - PullRequest
0 голосов
/ 25 октября 2019

Я использую весеннюю загрузку версии 2.1.9.RELEASE вместе с Java 1.8 и у меня два запущенных процесса, которые я хотел запустить параллельно. Поэтому я решил использовать нить. Когда я запускаю метод sumResult, первый поток запускается первым, а первый поток ожидает завершения второго.

Почему эти два потока не запускаются одновременно или, по крайней мере, после каждогодругое?

private void sumResult(String year, String month, String day) throws 
    ExecutionException, InterruptedException {
         ExecutorCompletionService<Boolean> completionService = new 
         ExecutorCompletionService<>(Executors.newCachedThreadPool());

         // First thread
         mut.initialise(year, month, day);
         boolean mutCompleted = completionService.submit(
               ()-> mut.sum(),true).get();

         // Second thread
         apt.initialise(year, month, day);
         boolean aptCompleted = completionService.submit(
              ()-> apt.sum(), true).get();

         // On completion of both thread
         if(mutCompleted && aptCompleted ){
              mixAndPrint();
         }

}

1 Ответ

4 голосов
/ 25 октября 2019

Поскольку вы блокируете вызов get() на первом задании, даже не отправив второе.

submit
get
submit
get

Если вы хотите, чтобы они выполнялись параллельно, вам нужно выполнить

submit
submit
get
get
...