1.線程狀態(tài)轉(zhuǎn)換
1蜕企、新建狀態(tài)(New):新創(chuàng)建了一個(gè)線程對(duì)象膀跌。
2蔬螟、就緒狀態(tài)(Runnable):線程對(duì)象創(chuàng)建后同衣,其他線程調(diào)用了該對(duì)象的start()方法糊饱。該狀態(tài)的線程位于可運(yùn)行線程池中魔市,變得可運(yùn)行,等待獲取CPU的使用權(quán)讲婚。
3尿孔、運(yùn)行狀態(tài)(Running):就緒狀態(tài)的線程獲取了CPU,執(zhí)行程序代碼筹麸。
4活合、阻塞狀態(tài)(Blocked):阻塞狀態(tài)是線程因?yàn)槟撤N原因放棄CPU使用權(quán),暫時(shí)停止運(yùn)行物赶。直到線程進(jìn)入就緒狀態(tài)芜辕,才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。阻塞的情況分三種:
(一)块差、等待阻塞:運(yùn)行的線程執(zhí)行wait()方法侵续,JVM會(huì)把該線程放入等待池中。(wait會(huì)釋放持有的鎖)
(二)憨闰、同步阻塞:運(yùn)行的線程在獲取對(duì)象的同步鎖時(shí)状蜗,若該同步鎖被別的線程占用,則JVM會(huì)把該線程放入鎖池中鹉动。
(三)轧坎、其他阻塞:運(yùn)行的線程執(zhí)行sleep()或join()方法,或者發(fā)出了I/O請(qǐng)求時(shí)泽示,JVM會(huì)把該線程置為阻塞狀態(tài)缸血。當(dāng)sleep()狀態(tài)超時(shí)、join()等待線程終止或者超時(shí)械筛、或者I/O處理完畢時(shí)捎泻,線程重新轉(zhuǎn)入就緒狀態(tài)。(注意,sleep是不會(huì)釋放持有的鎖)
5埋哟、死亡狀態(tài)(Dead):線程執(zhí)行完了或者因異常退出了run()方法笆豁,該線程結(jié)束生命周期。