ThreadPoolExecutor 文档有一个 remove() 方法,但只允许删除特定任务。purge() 仅适用于已取消的 Future 任务。我的想法是清除持有所有排队任务的队列。ThreadPoolExecutor 提供了访问此内部队列的方法,但文档指出:
引用: 方法 getQueue() 允许访问工作队列以进行监视和调试。强烈不建议将此方法用于任何其他目的。
因此,获取此队列并清除它不是一个选项。此外,文档的这段代码说:
引用: 两个提供的方法 remove(java.lang.Runnable) 和 purge() 可用于协助存储回收,当大量排队任务被取消时。
如何实现呢?当然,我可以维护一个我提交给执行器的所有任务列表,在关闭情况下,我遍历所有条目并使用remove()方法从ThreadPoolExecutor中删除它们... 但是...拜托,这浪费内存,而且维护这个列表也很麻烦。(例如,删除已执行的任务)
我非常感谢任何提示或解决方案!