java - Java并发性–立即关闭线程池

标签 java multithreading concurrency

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

ExecutorService workers = Executors.newCachedThreadPool();

像这样调用每个池任务:
workers.invokeAll(tasks);

完成后,将其关闭,如下所示:
workers.shutdown();

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

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

什么是最干净的方法来做到这一点?

谢谢

最佳答案

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

workers.shutdownNow()

通常,该调用会发送中断所有工作线程。但是,正确的中断处理有些隐含,方法文档指出,仅尽了最大的努力来停止任务。因此,某些JVM实现可能比发送中断更糟糕,因此您可能不希望信任此调用。

您可能需要查看其他答案,以了解如何适本地确保正确关闭线程并为所有辅助任务实现这样的解决方案,以确保正确关闭。例如,在this答案中, jack (Jack)解释了一种典型的解决方案,使您可以在工作人员中 checkin volatile 字段。可以从您要停止任务的位置设置此字段。

关于java - Java并发性–立即关闭线程池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010251/

相关文章:

java - 在 JavaME : how to optimize it? 中实现阻塞队列

java - 正则表达式在在线测试器中匹配,但在 JAVA 中不匹配

java - 如何停止 Web 服务器中的线程

.net - 如何在服务停止时停止多线程Windows服务中的工作线程

java - 在单独的线程中更新 BufferedImage 的单独区域安全吗?

python - 我可以在 Future 中使用 ProcessPoolExecutor 吗?

java - 尝试创建一个对象数组,数组的长度和数组中的对象均由用户确定

java - 为什么 @MatrixParam 值似乎只来自最后一段?

java - 在Java中,我们抛出的异常不会被默认处理程序捕获?正确的

单例作用域类方法中的 Java 线程安全