類Thread里面有一個(gè)枚舉State定義了線程的幾種狀態(tài),分別是new,runnable,blocked,waiting,timed_waiting,terminated.
1建钥、初始化狀態(tài)(NEW)
線程對(duì)象在編程語(yǔ)言級(jí)別創(chuàng)建成功未巫,但在操作系統(tǒng)中還并沒(méi)有創(chuàng)建對(duì)應(yīng)的線程柬讨,這個(gè)時(shí)候的線程還不能獲得CPU資源。
2标沪、運(yùn)行狀態(tài)(RUNNABLE)
RUNNABLE狀態(tài)下的線程細(xì)分為兩種情況
1.就緒狀態(tài):
線程已經(jīng)被啟動(dòng),正在等待被分配給CPU時(shí)間片,也就是說(shuō)此時(shí)線程正在就緒隊(duì)列中排隊(duì)等候得到CPU資源仔掸。即調(diào)用了start方法之后鸯旁。
2.運(yùn)行狀態(tài)
這種狀態(tài)的下線程已經(jīng)獲得了CPU的資源正在運(yùn)行噪矛,即在執(zhí)run().
3、休眠狀態(tài)(WAITING铺罢、TIME_WAITING 艇挨、BLOCKED)
當(dāng)一個(gè)處于RUNNABLE狀態(tài)中的線程調(diào)用了阻塞API方法時(shí),線程進(jìn)入休眠狀態(tài)韭赘,休眠狀態(tài)下的線程無(wú)法獲得CPU資源缩滨,只有當(dāng)某個(gè)條件點(diǎn)到達(dá)時(shí)候喚醒該線程,線程變成可運(yùn)行狀態(tài)才可以重新獲得CPU資源泉瞻;我們通常把JAVA
中的BLOCKED脉漏、WAITING、TIMED_WAITING三種的阻狀態(tài)統(tǒng)一歸為休眠狀態(tài)袖牙。
BLOCKED:當(dāng)一個(gè)線程在等待synchronizd同步塊的鎖時(shí)侧巨,線程會(huì)處于BLOCKED狀態(tài)。
WAITING:當(dāng)一個(gè)處于RUNNABLE的線程調(diào)用該線程的阻塞API時(shí)線程進(jìn)入WAITING狀態(tài)鞭达,直到其他線程將其喚醒刃泡。
TIME_WAITING:? TIME_WAITING 狀態(tài)和WAITING狀態(tài)區(qū)別在于TIME_WAITING在對(duì)應(yīng)的方法加了超時(shí)時(shí)間巧娱。
4、終止?fàn)顟B(tài)(TERMINATED)
線程執(zhí)行結(jié)束或者執(zhí)行異常后線程終止烘贴。