0

我有这样的执行人服务:

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

4

1 回答 1

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

于 2013-02-14T06:21:24.377 回答