作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
void process(String question){
Callable<ResponseList> callable1 = () -> this.stsCompute question);
Future<ResponseList>task1 = executorService.submit(callable1);
Callable<ResponseList> callable2 = () -> this.dssmCompute(question);
Future<ResponseList>task2 = executorService.submit(callable2);
try{
ResponseList stsResponse = task1.get();
ResponseList dssmResponse = task2.get();
}catch (Exception e){
e.printStackTrace();
}
// Do I need to wait until the first 2 threads complete?
processResponse(stsResponse, dssmResponse);
}
在这个“process”方法中,我有两个额外的线程“callable1”和“callable2”来并发执行。我想确保只有当这两个任务完成时,主线程“processResponse()”中的方法才能开始执行。
在这种情况下,我是否需要添加任何额外的控制来保证执行的顺序,是否已经足够好了?如果没有,如何实现这种控制?
最佳答案
您应该使用 ExecutorService.invokeAll ,它将在完成时返回 Future 列表。此外,我会使用更短的语法,例如
List<Future> futures = executorService.invokeAll(Arrays.asList(()->dssmCompute(), ()->dssmCompute()));
关于java - 我需要用主线程来控制这两个线程的执行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53134840/
我是一名优秀的程序员,十分优秀!