新建(new):新創(chuàng)建了一個(gè)線程對(duì)象。
就緒(可運(yùn)行狀態(tài))(runnable):線程對(duì)象創(chuàng)建后,當(dāng)調(diào)用線程對(duì)象的 start()方法,該線程處于就緒狀態(tài),等待被線程調(diào)度選中,獲取cpu的使用權(quán)。
運(yùn)行(running):可運(yùn)行狀態(tài)(runnable)的線程獲得了cpu時(shí)間片(timeslice),執(zhí)行程序代碼。注:就緒狀態(tài)是進(jìn)入到運(yùn)行狀態(tài)的唯一入口,也就是說,線程要想進(jìn)入運(yùn)行狀態(tài)執(zhí)行,首先必須處于就緒狀態(tài)中;
阻塞(block):處于運(yùn)行狀態(tài)中的線程由于某種原因,暫時(shí)放棄對(duì) CPU的使用權(quán),停止執(zhí)行,此時(shí)進(jìn)入阻塞狀態(tài),直到其進(jìn)入到就緒狀態(tài),才 有機(jī)會(huì)再次被 CPU 調(diào)用以進(jìn)入到運(yùn)行狀態(tài)。
阻塞的情況分三種:
(一). 等待阻塞:運(yùn)行狀態(tài)中的線程執(zhí)行 wait()方法,JVM會(huì)把該線程放入等待隊(duì)列(waitting queue)中,使本線程進(jìn)入到等待阻塞狀態(tài);(二). 同步阻塞:線程在獲取 synchronized 同步鎖失敗(因?yàn)殒i被其它線程所占用),,則JVM會(huì)把該線程放入鎖池(lock pool)中,線程會(huì)進(jìn)入同步阻塞狀態(tài);(三). 其他阻塞: 通過調(diào)用線程的 sleep()或 join()或發(fā)出了 I/O 請(qǐng)求時(shí),線程會(huì)進(jìn)入到阻塞狀態(tài)。當(dāng) sleep()狀態(tài)超時(shí)、join()等待線程終止或者超時(shí)、或者 I/O 處理完畢時(shí),線程重新轉(zhuǎn)入就緒狀態(tài)。
死亡(dead)(結(jié)束):線程run()、main()方法執(zhí)行結(jié)束,或者因異常退出了run()方法,則該線程結(jié)束生命周期。死亡的線程不可再次復(fù)生。