等待ExecutorService完成所有任务的最简单方法是什么?我的任务主要是计算,所以我只想运行大量的工作 - 每个核心一个.现在我的设置如下:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
ComputeDTask实现runnable.这似乎正确执行任务,但代码崩溃wait()了IllegalMonitorStateException.这很奇怪,因为我玩了一些玩具示例,它似乎工作.
uniquePhrases包含数万个元素.我应该使用其他方法吗?我正在寻找尽可能简单的东西
我用a ExecutorService来执行任务.此任务可以递归地创建提交给它的其他任务,ExecutorService这些子任务也可以这样做.
我现在遇到的问题是,在我继续之前,我要等到所有任务完成(即所有任务都完成并且他们没有提交新任务).
我不能ExecutorService.shutdown()在主线程中调用,因为这可以防止新任务被接受ExecutorService.
ExecutorService.awaitTermination()如果shutdown没有被召唤,呼叫似乎什么都不做.
所以我有点卡在这里.ExecutorService要看到所有工人都闲着,这不是很难,是吗?我能想出的唯一不合理的解决方案是直接使用a ThreadPoolExecutor并getPoolSize()偶尔查询它.这样做真的没有更好的方法吗?