java - 执行器服务在未等待任务完成的情况下终止

标签 java multithreading executorservice

我有这样的执行者服务:

ExecutorService exec = Executors.newFixedThreadPool(4);
for(int i=0; i<4;i++) {
  Consumer consumer = new Consumer();
  exec.execute(new ConsumerstartUpThread(consumer));
}

ConsumerStartUpThread 实现了 runnable,它的 run 方法具有巨大的功能,需要调用其他几个 API。现在,当我在 Debug模式下运行代码时,任务即将完成。当我正常运行它时,任务未完成,线程正在终止。线程不是会等待所有任务完成吗?为什么他们没有完成任务就被解雇?

最佳答案

尝试

ExecutorService exec = Executors.newFixedThreadPool(4);
List<Callable<Object>> tasks = new ArrayList<Callable<Object>>();
for (int i = 0; i < 4; i++) {
    tasks.add(Executors.callable(new ConsumerstartUpThread(new Consumer())));
}
exec.invokeAll(tasks);
exec.shutdown();

invokeAll 将等待所有任务终止(请参阅 API)。为了更简单,让 ConsumerstartUpThread 实现 Callable 而不是 Runnable

关于java - 执行器服务在未等待任务完成的情况下终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868743/

相关文章:

java - 迭代 LinkedHashSet 时跳过同步并且未完成删除?

java - Android:如何在渲染 setText() 后立即运行回调

java多线程 - 限制提交给ExecutorService

java - 某些节点出现故障后的 Hazelcast 执行器服务行为

java - 带有 header 的 Hadoop MapReduce 输出

java - 如何在存储库模式中解决这个一般问题?

java - 如何从字符串中获取多个字符?

java - Java Servlets中这条语句是什么意思?

java - 嵌套 JavaFX ExecutorService 关闭

java - GCC 和 JVM 自动并行批处理