等待执行者的线程完成,由执行者提交

时间:2019-06-17 23:08:17

标签: java multithreading executorservice

更新:我使用此代码对其进行了修复(仅在您知道任务总数的情况下有效,我的情况)

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();
    }
}

更新:我的问题很明显,我需要通过执行者提交来完成;没有其他方法

我正在使用执行程序服务来执行任务,我想在线程完成时得到通知,我用谷歌搜索发现了一种方法,但是由于我正在使用执行程序提交来添加我的任务,因此调用执行程序执行,我没有找到一种方法,有办法吗?

1 个答案:

答案 0 :(得分:3)

executor.submit返回Future对象,Future具有许多实用方法,例如isDone(),get()等。!

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html