執行緒狀態、執行緒打斷
阿新 • • 發佈:2022-03-06
一、Java的6種執行緒狀態
new:執行緒建立,還未啟動
runnable:可執行狀態,由執行緒排程器安排執行
ready:就緒狀態
running:執行
waiting:等待被喚醒,如自旋
timed waiting:隔一段時間後自動喚醒
blocked:被阻塞,只有synchronized才會到該狀態
terminated:執行緒結束
二、執行緒打斷
1、interrupt:打斷某個執行緒,只是設定執行緒的標誌位,並不是真正的打斷執行緒。是不能中斷正在競爭鎖的執行緒
isInterrupted:查詢執行緒是否被打斷
static interrupted:查詢當前執行緒是否被打斷過,並重新設定標誌位
2、如果想打斷鎖爭搶過程用ReentrantLock,使用lockInterruptibly方法
sleep方法在睡眠的時候,不到時間是沒辦法叫醒的,這個是時候可以用interrupt設定標誌位,然後必須得catch到interruptedException來進行處理,決定繼續睡或者其他邏輯
捕獲到異常後java會自動進行標記位的復位
三、執行緒的結束
面試題:如何優雅的結束一個執行緒?
1、stop方法,但是該方法已被棄用
因為使用stop方法會釋放所有鎖,加鎖主要為了資料一致性問題,使用stop釋放所有鎖後,資料容易不一致
2、使用interrupt,捕獲異常並且處理
作者: http://cnblogs.com/lyc-code/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結,否則保留追究法律責任的權力。