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

时间:2015-11-17 06:29:14

标签: java multithreading forkjoinpool

这是一个例子:

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

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

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

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,怎么做呢?

任何链接,参考都会对我有所帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

如果我正确处理您的问题,您只需join提交的任务:

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