線程的生命周期是線程對象的生老病死,即線程的狀態(tài)。
線程生命周期可以通過getState()方法獲得, 線程的狀態(tài)是Thread.State枚舉類型定義的, 由以下幾種:
● NEW,新建狀態(tài). 創(chuàng)建了線程對象,在調(diào)用start()啟動(dòng)之前的狀態(tài)。
● RUNNABLE,可運(yùn)行狀態(tài). 它是一個(gè)復(fù)合狀態(tài),包含:READY和RUNNING兩個(gè)狀態(tài). READY狀態(tài)該線程可以被線程調(diào)度器進(jìn)行調(diào)度使它處于RUNNING狀態(tài), RUNING狀態(tài)表示該線程正在執(zhí)行. Thread.yield()方法可以把線程由RUNNING狀態(tài)轉(zhuǎn)換為READY狀態(tài)。
● BLOCKED阻塞狀態(tài).線程發(fā)起阻塞的I/O操作,或者申請由其他線程占用的獨(dú)占資源,線程會(huì)轉(zhuǎn)換為BLOCKED阻塞狀態(tài). 處于阻塞狀態(tài)的線程不會(huì)占用CPU資源. 當(dāng)阻塞I/O操作執(zhí)行完,或者線程獲得了其申請的資源,線程可以轉(zhuǎn)換為RUNNABLE。
● WAITING等待狀態(tài). 線程執(zhí)行了object.wait(), thread.join()方法會(huì)把線程轉(zhuǎn)換為WAITING等待狀態(tài), 執(zhí)行object.notify()方法,或者加入的線程執(zhí)行完畢,當(dāng)前線程會(huì)轉(zhuǎn)換為RUNNABLE狀態(tài)。
● TIMED_WAITING狀態(tài),與WAITING狀態(tài)類似,都是等待狀態(tài).區(qū)別在于處于該狀態(tài)的線程不會(huì)無限的等待,如果線程沒有在指定的時(shí)間范圍內(nèi)完成期望的操作,該線程自動(dòng)轉(zhuǎn)換為RUNNABLE。
● TERMINATED終止?fàn)顟B(tài),線程結(jié)束處于終止?fàn)顟B(tài)