更新:我用这段代码修复了它(只有在你知道总任务计数时才有效,我的情况(
int totalThreads = 0;
int finishedThreads = 0;
private void checkExecutorFinished() {
if(finishedThreads == totalThreads) {
// Exceutor threads got finished
System.out.println(shufflingResult);
}
}
private void startMappingPhase() throws Exception {
totalThreads = fileLines.size();
for (String line : fileLines) {
Future future = new ExecutingController().mapping(line);
while (!future.isDone()) {
//
}
shuffle((Collection<Pair<String, Integer>>) future.get());
finishedThreads++;
checkExecutorFinished();
}
}
更新:我的问题很清楚,我需要通过遗嘱执行人提交来做到这一点; 而不是其他方法
我正在使用执行器服务来完成我的任务,我想在线程完成时得到通知,我用谷歌搜索它发现有一种方法,但是通过调用执行器执行,因为我正在使用执行器提交来添加我的任务,我没有找到一种方法可以做到这一点,有办法吗?
executor.submit 返回 Future 对象,Future 有许多实用方法,如 isDone((、get(( 等!!
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html