2014-09-24 157 views
2

我想在不使用停用的stop()方法的情況下終止java中的線程。 我的線程中的run()方法調用另一個執行可能需要很長時間的任務的方法,並且我希望能夠在它返回之前將其停止。Java - 終止線程

我的問題是,我不想在從run調用的方法中處理這個問題,所以例如我不能使用全局布爾變量來終止線程,因爲我無法檢查它在方法內。 有沒有一種方法可以使用interrupt()方法來實現這個目標?

+1

如果你真的陷入了困境,你能否離開孤立的線程:將其設置爲在從「long method」重新調整時終止自己,將其優先級設置爲儘可能最低,然後忘掉它?最終,它會自行死亡,不需要和不受歡迎。[sob] – 2014-09-24 11:44:00

回答

3

簡短的回答:你有重寫長時間運行的方法,以便它檢查,例如,一些全局布爾值或中斷標誌。根據以下評論中的assylias建議,你可以做例如while (!isInterrupted()) { ... }

如果您的長時間運行的方法處於某個(行爲良好的)阻塞調用的中間,那麼您將希望中斷該線程,使其早於阻塞調用返回,以便您可以檢查條件看看是否該結束了。

+1

爲什麼使用布爾變量而不是標準的中斷機制? – assylias 2014-09-24 11:42:29

+0

喚醒可能有各種原因。 (在這個例子中可能沒有,但我認爲將中斷解釋爲「立即終止」是不好的做法。)我通常將中斷解釋爲「狀態可能已經改變,我可能需要重新評估一些條件」 – aioobe 2014-09-24 11:44:04

+0

@因爲aioobe說(下)。你不想殺了一個重要的任務。 – 2014-09-24 11:44:37