2012-11-12 219 views
0

我有一個可能數量的線程的應用程序。 basicly線程應該工作的:終止線程池中的線程

  • 主線
  • CalculationThread
  • CalculationThread
  • CalculationThread

添加/執行這些線程的FixedThreadPool是沒問題的。線程本身調用Mainthread中的某個函數來提交結果。在這個步驟之後,線程應該睡覺,直到它將被再次調用以用於下一次鍛鍊。

Mainthread保存對CalculationThread的引用,將更新提交給線程並將其讀入池以開始下一次計算。

我的問題:如何強制執行特定線程的超時?如果發生無限循環,則執行此超時也必須起作用

回答

1

如果沒有來自線程的合作,至少不能以合理的方式執行超時。您應該編寫計算任務,以便它們符合Java中斷機制。基本上,這意味着偶爾檢查Thread.interrupted返回值並在true上中止。

唯一的其他選擇是笨蛋–和棄用– Thread.stop,這可以造成一般混亂,尤其是在池管理線程上完成時。

+0

問題是線程調用/包裝外部庫文件。那麼是否有一種方法可以將線程以最小的附帶損害拋出? – jwacalex

+0

不幸的是沒有。這是一個很常見的問題,我從來沒有讀過任何更好的建議。 –

+0

爲什麼不使用[Guava](http://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained)的'ListenableFuture'和'FutureCallback',這樣你可以做一些事情,如果它工作或失敗? – ElderMael