如何正確地停止一個線程
方法如下:
- 使用退出標誌,使線程正常退出,也就是當 run 方法完成後線程終止
- 使用 interrupt 方法中斷線程
- 退出標誌法:
需要 while() 循環在某以特定條件下退出,最直接的辦法就是設一個 boolean 標誌,並通過設置這個標誌來控制循環是否退出:
需要注意的是:isCancelled 需要為 volatile,保證線程讀取時 isCancelled 是最新數據
- interrupt法終止:
如果線程是阻塞的,則不能使用退出標誌法來終止線程。這時就只能使用 Java 提供的中斷機制:
- void interrupt()
如果線程處於被阻塞狀態,那麼線程將立即退出被阻塞狀態,並拋出一個 InterruptedException 異常
如果線程處於正常活動狀態,那麼該線程的中斷標誌為 true。
- static boolean interrupted()
測試當前線程是否被中斷。這一調用會將當前線程的中斷狀態重置為 false
- boolean isInterrupted()
測試線程是否被終止。不像靜態的中斷方法,這一調用不改變線程的中斷狀態
終止 實例代碼
以上代碼運行輸出結果為:
閱讀更多 咱小二 的文章