java - 如何等待线程池完成所有任务?

标签 java

我正在创建一个线程池执行器,并希望它在继续之前完成所有任务: 例如:

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);

while(...) {

    taskExecutor.execute(new MyTask());
    taskExecutor.execute(new MyTask());
    taskExecutor.execute(new MyTask());

}

//...wait for completion somehow

最佳答案

有多种方法可以做到这一点:

但最流行的是使用 threadpool.shutdown():

public void awaitTerminationAfterShutdown(ExecutorService threadPool) {
    threadPool.shutdown();
    try {
        if (!threadPool.awaitTermination(60, TimeUnit.SECONDS)) {
            threadPool.shutdownNow();
        }
    } catch (InterruptedException ex) {
        threadPool.shutdownNow();
        Thread.currentThread().interrupt();
    }
}

关于java - 如何等待线程池完成所有任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59769004/

相关文章:

java - 在具有枚举 (EnumType.STRING) 的实体上使用 LIKE 运算符执行 JPA 查询

java - 使用按钮标签,我可以自定义按钮吗?

java - 如何获取正在运行的 Java VM 的名称?

Java 和 Tomcat - CodeCache 已满。编译器已被禁用

java - 在 Java 中创建动态代理抢走了 OS X 的焦点

java - 我应该如何实现这个短信通知系统?

java - Android - SQlite - 将空值存储到双字段中?

java - 为什么在 ByteBuffer.allocateDirect(10).array() 上出现 UnsupportedOperationException

Java - 通过大型字符串列表改进迭代

java - 如何将任务添加到 gradle 中的主要 'build' 任务