上圖是一個線程的生命周期狀態(tài)流轉(zhuǎn)圖鲤看,很清楚的描繪了一個線程從創(chuàng)建到終止的過程镰绎。
這些狀態(tài)的枚舉值都定義在java.lang.Thread.State下
NEW:毫無疑問表示的是剛創(chuàng)建的線程葫掉,還沒有開始啟動。
RUNNABLE: ?表示線程已經(jīng)觸發(fā)start()方式調(diào)用跟狱,線程正式啟動俭厚,線程處于運(yùn)行中狀態(tài)。
BLOCKED:表示線程阻塞驶臊,等待獲取鎖挪挤,如碰到synchronized、lock等關(guān)鍵字等占用臨界區(qū)的情況关翎,一旦獲取到鎖就進(jìn)行RUNNABLE狀態(tài)繼續(xù)運(yùn)行扛门。
WAITING:表示線程處于無限制等待狀態(tài),等待一個特殊的事件來重新喚醒纵寝,如通過wait()方法進(jìn)行等待的線程等待一個notify()或者notifyAll()方法论寨,通過join()方法進(jìn)行等待的線程等待目標(biāo)線程運(yùn)行結(jié)束而喚醒,一旦通過相關(guān)事件喚醒線程爽茴,線程就進(jìn)入了RUNNABLE狀態(tài)繼續(xù)運(yùn)行葬凳。
TIMED_WAITING:表示線程進(jìn)入了一個有時限的等待,如sleep(3000)室奏,等待3秒后線程重新進(jìn)行RUNNABLE狀態(tài)繼續(xù)運(yùn)行火焰。
TERMINATED:表示線程執(zhí)行完畢后,進(jìn)行終止?fàn)顟B(tài)胧沫。
需要注意的是昌简,一旦線程通過start方法啟動后就再也不能回到初始NEW狀態(tài)占业,線程終止后也不能再回到RUNNABLE狀態(tài)。