我有這個相當簡單的問題關於ThreadPoolExecutor。我有以下情況:我必須從隊列中消耗對象,爲它們創建適當的輔助任務並將它們提交給ThreadPoolExecutor。這很簡單。但在關機場景中,許多工人可能會排隊執行。由於其中一個任務可能會運行一個小時,並且我希望能夠相對快速地正常關閉應用程序,所以我希望在正常完成已處理任務的同時放棄ThreadPoolExecutor中的所有排隊任務。刪除ThreadPoolExecutor的所有排隊任務
ThreadPoolExecutor文檔有一個remove()方法,但只允許刪除特定的任務。 purge()僅適用於已取消的未來任務。我的想法是清除隊列中所有排隊的任務。該的ThreadPoolExecutor提供訪問該內部隊列但文檔指出:
方法getQueue()允許訪問 工作隊列監測 和調試的目的。對於任何其他目的,使用此方法 強烈建議 不鼓勵。
所以抓住這個隊列並清除它不是一個選項。此外,該片斷的文件說:
兩個提供的方法, 刪除(一個java.lang.Runnable)和清除() 可存儲協助 填海當大量的 排隊的任務變得取消。
怎麼樣?當然,我可以維護我提交給執行者的所有任務的列表,並且在關閉的情況下,我遍歷所有條目並使用remove()方法將它們從ThreadPoolExecutor中移除...但是...來吧,這是一個浪費內存和維護這份清單的麻煩。 (刪除已執行的任務,例如)
我欣賞任何提示或解決方案!
這可能是最乾淨的方法,因此我接受這個答案。 :-)即使我希望已經有這樣的東西......所以:讓我們編寫這個東西。 :-) – Malax 2009-11-06 09:22:23