执行程序服务终止而不等待任务完成

时间:2013-02-14 06:06:11

标签: 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。现在,当我在调试模式下运行代码时,任务即将完成。当我正常运行时,任务不完整,线程终止。是不是线程会等到所有任务完成之后?为什么他们在没有完成任务的情况下被终止?

1 个答案:

答案 0 :(得分: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