【发布时间】:2010-12-13 08:51:01
【问题描述】:
我对@987654321@ 有一个相当简单的问题。我有以下情况:我必须使用队列中的对象,为它们创建适当的工作任务并将它们提交给 ThreadPoolExecutor。这很简单。但在关闭场景中,许多工作人员可能会排队等待执行。由于其中一个任务可能会运行一个小时,并且我希望相对快速地正常关闭应用程序,因此我想丢弃 ThreadPoolExecutor 中的所有排队任务,而已经处理的任务应该正常完成。
ThreadPoolExecutor 文档有一个remove() 方法,但只允许删除特定任务。 purge() 仅适用于已取消的未来任务。我的想法是清除包含所有排队任务的队列。 ThreadPoolExecutor 提供对此内部队列的访问,但文档指出:
方法 getQueue() 允许访问 用于监控目的的工作队列 和调试。这种方法的使用 出于任何其他目的强烈 气馁。
因此,抓住这个队列并清除它不是一种选择。此外,这个文档的 sn-p 说:
两种提供的方法, 删除(java.lang.Runnable)和清除() 可用于协助存储 大量回收时 排队的任务被取消。
怎么样?当然,我可以维护我提交给执行程序的所有任务的列表,并且在关闭的情况下,我遍历所有条目并使用 remove() 方法将它们从 ThreadPoolExecutor 中删除......但是......来吧,这是一个浪费内存并且维护这个列表很麻烦。 (例如删除已经执行的任务)
感谢任何提示或解决方案!
【问题讨论】:
标签: java multithreading threadpool executorservice executor