我正在创建这样的线程池:
ExecutorService workers = Executors.newCachedThreadPool();
调用每个池的任务如下:
workers.invokeAll(tasks);
完成后关闭那些像这样:
workers.shutdown();
我有大约4个线程池执行不同的过程,并且这些线程池是从servlet类创建的。
我想要做的是关闭那些线程池中的所有线程。
实现这一目标的最简洁方法是什么?
由于
答案 0 :(得分:0)
如果所有工作任务都正确处理中断,您可以尝试调用:
workers.shutdownNow()
该调用通常也会发送中断所有工作线程。但是,正确的中断处理有点隐含,方法文档说只有尽力而为尝试停止任务。因此,某些JVM实现可能比发送中断更糟糕,为什么您可能不想信任此调用。
您可能希望查看其他答案,如何优雅地确保正确关闭线程并为所有工作任务实施此类解决方案,以确保正常关闭。例如,在this回答中, Jack 解释了具有易失性字段的典型解决方案,您可以在工作人员中查看。可以在您想要停止任务的位置设置此字段。