相关疑难解决方法(0)

ExecutorService,如何等待所有任务完成

等待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包含数万个元素.我应该使用其他方法吗?我正在寻找尽可能简单的东西

java multithreading executorservice threadpool

186
推荐指数
9
解决办法
18万
查看次数

Java ExecutorService:awaitTermination所有递归创建的任务

我用a ExecutorService来执行任务.此任务可以递归地创建提交给它的其他任务,ExecutorService这些子任务也可以这样做.

我现在遇到的问题是,在我继续之前,我要等到所有任务完成(即所有任务都完成并且他们没有提交新任务).

我不能ExecutorService.shutdown()在主线程中调用,因为这可以防止新任务被接受ExecutorService.

ExecutorService.awaitTermination()如果shutdown没有被召唤,呼叫似乎什么都不做.

所以我有点卡在这里.ExecutorService要看到所有工人都闲着,这不是很难,是吗?我能想出的唯一不合理的解决方案是直接使用a ThreadPoolExecutorgetPoolSize()偶尔查询它.这样做真的没有更好的方法吗?

java concurrency multithreading executorservice

32
推荐指数
3
解决办法
1万
查看次数