更新:我使用此代码对其进行了修复(仅在您知道任务总数的情况下有效,我的情况)
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();
}
}
更新:我的问题很明显,我需要通过执行者提交来完成;没有其他方法
我正在使用执行程序服务来执行任务,我想在线程完成时得到通知,我用谷歌搜索发现了一种方法,但是由于我正在使用执行程序提交来添加我的任务,因此调用执行程序执行,我没有找到一种方法,有办法吗?
答案 0 :(得分:3)
executor.submit返回Future对象,Future具有许多实用方法,例如isDone(),get()等。!
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html