Java并发 - 立即线程池关闭

时间:2015-06-23 18:06:44

标签: java multithreading concurrency

我正在创建这样的线程池:

ExecutorService workers = Executors.newCachedThreadPool();

调用每个池的任务如下:

workers.invokeAll(tasks);

完成后关闭那些像这样:

workers.shutdown();

我有大约4个线程池执行不同的过程,并且这些线程池是从servlet类创建的。

我想要做的是关闭那些线程池中的所有线程。

实现这一目标的最简洁方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

如果所有工作任务都正确处理中断,您可以尝试调用:

workers.shutdownNow()

该调用通常也会发送中断所有工作线程。但是,正确的中断处理有点隐含,方法文档说只有尽力而为尝试停止任务。因此,某些JVM实现可能比发送中断更糟糕,为什么您可能不想信任此调用。

您可能希望查看其他答案,如何优雅地确保正确关闭线程并为所有工作任务实施此类解决方案,以确保正常关闭。例如,在this回答中, Jack 解释了具有易失性字段的典型解决方案,您可以在工作人员中查看。可以在您想要停止任务的位置设置此字段。