java - Java中如何正确同步和重用ForkJoinPool?

标签 java multithreading forkjoinpool

这是一个例子:

ForkJoinPool pool = new ForkJoinPool();  
pool.submit(new RecursiveTaskA());  
// wait the task to finish  
doSomethingElse();  

pool.submit(new RecursiveTaskB());
...  

问题1:
如何确保 RecursiveTaskA 在调用 doSomethingElse() 之前完成?
目前我的解决方案是:

ForkJoinPool pool = new ForkJoinPool();  
pool.submit(new RecursiveTaskA());  

pool.shutdown();  
pool.awaitTermination(1, TimeUnit.MINUTES);  

// wait the task to finish  
doSomethingElse();  

这是正确的方法吗?或者有更好的办法吗?
问题2:
如果我使用上面的解决方案,则 pool.submit(new RecursiveTaskB()); 结果错误。我不想创建一个新的ForkJoinPool,该怎么办?

任何链接、引用资料都会对我有帮助,谢谢。

最佳答案

如果我正确理解你的问题,你可以 join提交的任务:

RecursiveTaskA taskA = new RecursiveTaskA();
pool.submit(taskA);
taskA.join();
doSomethingElse();  

关于java - Java中如何正确同步和重用ForkJoinPool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33750504/

相关文章:

java - 如何从头到尾遍历 TreeMap<Integer, T>

java - apache.poi HSSFCell getNumericCellValue 读取不正确

java - 尝试在 Java 中使用递归任务(Fork 和 Join)计算 (3*3)^2 时出错

java - java.util.concurrent.CompletableFuture 中的异常传播

java - 使用 Rest Assured 发出 POST 请求时出现内部服务器错误

c# - 无法将类型 'System.Threading.Tasks.Task' 隐式转换为 'Windows.Foundation.IAsyncAction' 。存在显式转换

java - 有必要让这个变量变易变吗?

wcf - 在循环中异步调用 WCF 服务

java - ForkJoinTask : Order of join()-ing

java - MySQLSyntaxErrorException : Mybatis :Bulk update query using foreach