为什么 spring boot using ExecutorCompletionService 中的线程不并行启动?
Why thread in spring boot using ExecutorCompletionService does not start in parallel?
我使用 spring 启动版本 2.1.9.RELEASE 和 Java 1.8,并且有两个我想并行启动的 lang 运行 进程。因此我决定使用线程。
当我启动 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();
}
}
因为您在提交第二个作业之前阻止了对第一个作业调用 get()
。
submit
get
submit
get
如果你想让它们运行并行,你需要做
submit
submit
get
get
我使用 spring 启动版本 2.1.9.RELEASE 和 Java 1.8,并且有两个我想并行启动的 lang 运行 进程。因此我决定使用线程。 当我启动 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();
}
}
因为您在提交第二个作业之前阻止了对第一个作业调用 get()
。
submit
get
submit
get
如果你想让它们运行并行,你需要做
submit
submit
get
get