1

我正在使用newFixedThreadPool()線程固定量,需要能夠如何知道哪個特定的runnable在我的threadPoolExecutor中死亡?

  1. 知道什麼時候可運行的一個已經死了,
  2. 知道哪些具體運行的是死了一個。

對此的一個解決方案是將Runnables作爲Thread對象包裝並調用isAlive()。線程運行,因爲他們應該有,但因爲aThread.start()永遠不會被執行者調用總是返回false這是沒有用的。我認爲在run()函數的開始處使Runnables觸發一個標誌的可能性就像建議的this question's answer一樣。跟蹤已經死亡的Runnables的最佳方式是什麼?因爲我的意圖是向執行者提交一個線程,這個線程基本上會和死掉的那個一樣。

+0

或者這些runnables應該無限期運行?或者他們是一項任務? –

+0

它們無限運行,直到執行程序調用「shutdown」爲止 –

+0

本質上,執行程序服務管理線程週期。自線程發明以來,管理線程的用戶一直是個問題。我維護一個線程管理器,並在幾年前寫了這篇文章。也許它可以幫助你:http://coopsoft.com/ar/j2searticle.html – edharned

回答

0
+0

我可以做到這一點,如果我使用'線程',但即時通訊使用'Runnable'。 'getState'不能被Runnable訪問。 –

+0

請閱讀此鏈接http://www.avajava.com/tutorials/lessons/how-do-i-determine-if-a-thread-is-alive-or-not.html – vk3105

1

看着那@ vk3105提供的文件後,我有一個想法。我最終看着this並實施了Future future = executorService.submit(aRunnable),這樣我就可以通過使用future.isDone()或者Runnable在完成之前取消future.isCancelled()來檢查該可運行的命令是否已終止。

相關問題