我正在使用一個線程池大小爲1的ThreadPoolExecutor來順序執行swing工作。我遇到了一個特殊情況,一個事件到達時創建一個執行某些客戶端 - 服務器通信的swing工作人員,然後更新ui(在done()方法中)。使用ThreadPoolExecutor的SwingWorker取消
當用戶觸發(點擊某個項目)某些事件時,這種方式可以正常工作,但如果發生很多事件,則不會發生這種情況。但是,這發生,所以我需要取消所有當前運行和計劃的工人。問題是支持ThreadPoolExecutor的隊列沒有意識到SwingWorker的取消過程(至少看起來像這樣)。如此計劃的工人會被取消,但已經在運行的工人不會。
,所以我說<T extends SwingWorker>
類型的併發隊列,只要它們不取消,當一個新的事件到達它調用.cancel(真)在隊列中的所有SwingWorkers持有所有工人的參考,並提交新SwingWorker到ThreadPoolExecutor。
摘要:SwingWorkers是使用單個線程在ThreadPoolExecutor中創建和執行的。只有最後提交的工人應該正在運行。
有沒有其他解決方案可以解決這個問題,還是可以這樣做嗎?
只是好奇...
它工作嗎?如果它沒有損壞不修復它(或修復它,直到它,大聲笑) – Gandalf 2009-06-17 16:57:12
是的,它的工作原理。但是編寫併發代碼很困難。我只想知道我的任務是否存在任何概念。 – MrWhite 2009-06-17 20:39:39