我有一個線程,它只是一次任務。如果在適當的時間無法做到這一點,我想阻止它。我怎樣才能做到這一點?我之前見過的所有方法都使用了一個while循環和一個多次完成任務的標誌;但我的任務不是那樣的。java:停止安全線程;不使用while和布爾標誌
謝謝大家。
我有一個線程,它只是一次任務。如果在適當的時間無法做到這一點,我想阻止它。我怎樣才能做到這一點?我之前見過的所有方法都使用了一個while循環和一個多次完成任務的標誌;但我的任務不是那樣的。java:停止安全線程;不使用while和布爾標誌
謝謝大家。
使用java.util.TimerTask
類 - 它用於調度一次性或由定時器重複執行的任務。
停止任務的唯一干淨方法是中斷它(或設置其他標誌),使線程正常停止。如果您的代碼中沒有外部循環,則可以在可安全中斷工作流程的各個關鍵點檢查它。對於大型代碼庫來說這可能很乏味,但這是最好的方法。
如果你有一個庫你沒有控制你可以使用Thread.stop()但是這可以讓你的應用程序處於一個未定義的狀態。它不殺死線程,但會觸發一個ThreadDeath錯誤,它將展開堆棧並最終調用塊等。問題是它將發生在有效的隨機代碼行中(即使是通過一行代碼的一半) A根據代碼的寫法,線程可以忽略ThreadDeath錯誤。
解決此問題的唯一方法是在另一個進程中運行不受信任的代碼,然後在進程花費太長時間時終止該進程。這可能會留下臨時文件,但是更安全的選擇。
首先謝謝你。但是:Timer任務有一個取消方法,用於取消它的執行,如果任務在這個調用發生時正在運行,任務將運行到完成,但不會再運行。我想讓任務停止,只是我停止了;我不希望任務在一段時間後不能完成。 – sajad
這工作它的任務是安排,並沒有開始,但不會一次。 – aalku