考慮接受需要很長時間初始化的服務(例如,JDBC連接的參數)的服務的配置設置的用戶界面。我們希望我們的用戶界面在服務初始化發生時保持響應。如果用戶進行其他更改,則應使用新參數取消初始化並重新啓動。ExecutorService在提交新任務時取消當前任務
由於參數在用戶鍵入每個字符時被組合在配置中,因此可能會在一行中創建大量初始化請求。只有最後一個應該執行。
我們已經放在一起的代碼實現了這個結果,但是看起來這種行爲似乎是實現ExecutorService的非常好的候選者。在我們將所有事情重構爲ExecutorService之前,我想我會詢問世界上是否有類似的實現。
更具體:
的ExecutorService的將有一個工作線程。一旦提交新任務,當前任務就會被取消(並且工作人員中斷)。然後爲下一次執行捕獲新任務。如果提交了另一個任務,則當前任務再次被取消,並且「下一次執行」任務被設置爲該新任務。當工作線程最終拿起下一個執行任務時,它將始終是提交的最後一個任務 - 所有其他任務都被取消或丟棄。
有沒有人有像他們願意分享的實現?或者是否有一個涵蓋此類行爲的標準庫?實現起來並不難,但要確定線程的安全性可能會非常棘手,所以我寧願使用經過驗證的代碼(如果可以的話)。
很酷的代碼,以更好的方式製作了中斷者。從getQueue()的項目可以投到FutureTask是問題的關鍵 – farmer1992
有趣的是,我發現execute()方法得到了該演員的方式。所以我最後得到了一個覆蓋執行的不同實現,檢查FutureTask是否被傳入,如果沒有,則包裝它。最終的代碼實際上是更清潔的,並且無論ExecutorService如何使用都能正常工作 - 如果我能記得的話,我會在我的代碼得到幫助時發佈更新。最終結果,BTW,非常光滑 - 各種各樣的用例。 –
ok - 更新了代碼 –