【问题标题】:Executor service getting terminated without waiting for the task to finishExecutor 服务在不等待任务完成的情况下终止
【发布时间】:2013-01-29 21:29:57
【问题描述】:

我有这样的执行者服务:

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。现在,当我在调试模式下运行代码时,任务就完成了。当我正常运行它时,任务不完整,线程被终止。不是线程会等到所有任务完成吗?为什么他们没有完成任务就被解雇了?

【问题讨论】:

  • 如果您进一步解释“被终止”是什么意思,它可能有助于发现问题。整个JVM都关闭了吗? ExecutorService 是否关闭?线程是阻塞还是中断还是什么?

标签: java multithreading executorservice


【解决方案1】:

试试

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

【讨论】:

  • 没有。但是我的线程甚至在任务完成之前就被暂停了。如果我给 exec.awaitTermination(10000,TimeUnit.MILLI_SECONDS) 任务即将完成。但我希望我的线程在任务完成后完成......
猜你喜欢
  • 2011-04-25
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 2023-03-10
相关资源
最近更新 更多