比方說,我有一個ExecutorService
(.newFixedThreadPool(2))
需要一系列請求。爲了簡單起見,它們只是:{ String url }
在運行未完成任務之前篩選ExecutorService ThreadPool
假設我按照該順序的網址爲[ aaa, bbb, ccc, aaa, ddd, aaa, ... ]
。 (是的,aaa
被重複多次)
那些url事件異步進來,所以它們都會在到達時提交到ExecutorService
。
有沒有辦法讓ExecutorService在允許下一個未決項目運行前檢查一個條件?例如。檢查未來的未決結果是否包含'aaa',如果是,則丟棄它,以便只觸發最近的結果。
我想出了一個hacky的方式,通過將url請求映射到時間戳並讓線程死亡,如果他們的時間戳不再匹配。但是,這具有ExecutorService仍然運行所有請求導致到最新的結果,如果連續提交很多請求,這可能會很重。
任何意見將不勝感激...謝謝!
我還沒有在一段時間用'Executors'工作,也許也看看'執行人#newCachedThreadPool()'等等 - 我只是不能給任何意見另一個'Executors'構造函數和'ExecutorService'子類關閉了我的頭頂... –
非常感謝這麼詳細的回覆,我真的很感激它!它實際上不僅僅是url地圖,因爲它實際上必須確保該請求對於特定視圖,url,圖像增強標識以及提交它的時間戳是有效的。這是一個https://github.com/mattsilber/imageloader我實際上正在考慮擴展ThreadPoolExecutor在此刻從beforeExecute隊列中刪除項目,以避免問題,但隊列和未決項目之間的包裝可以很好地工作......感謝您的建議! – Guardanis
我的榮幸!也許別人回答一些有用的見解。我想我的方法會遇到問題,如果「隊列處理線程」無法將足夠快的「url事件」傳遞給其他線程。我想可以有一個'ExecutorService'來管理隊列,然後是另一個'ExecutorService'來處理事件。但是,那麼它開始變得複雜:) –