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