1 線程狀態(tài)
- 初始化(NEW):新建一個(gè)線程對象惑淳,但是還沒有調(diào)用start() 方法炬藤;
- 運(yùn)行(RUNNABLE):運(yùn)行狀態(tài)包括 就緒(ready)和 運(yùn)行中(running)兩種狀態(tài)御铃。線程對象創(chuàng)建后被其它線程調(diào)用了start()方法,該狀態(tài)的線程位于可運(yùn)行線程池中獲取cpu使用權(quán)限沈矿,此時(shí)線程狀態(tài)為 就緒狀態(tài)(ready)上真。在就緒狀態(tài)中的線程獲取到cpu時(shí)間片后進(jìn)入 運(yùn)行中狀態(tài)(running)。
- 阻塞狀態(tài)(BLOCKED):線程等待進(jìn)入臨界區(qū)羹膳,例如:等待另外一個(gè)線程中的synchronized塊的執(zhí)行釋放(synchronized是重量級鎖的時(shí)候)
- 等待狀態(tài)(WAITING):表示有執(zhí)行權(quán)限時(shí)調(diào)用了它的wait方法睡互,或者是調(diào)用了join方法join了其它線程,等待被join的線程執(zhí)行結(jié)束的狀態(tài)。
- 計(jì)時(shí)等待(TIME_WAITING):當(dāng)線程調(diào)用了帶有超時(shí)參數(shù)的方法時(shí)會(huì)導(dǎo)致該線程進(jìn)入計(jì)時(shí)等待狀態(tài)湃缎。帶有超時(shí)參數(shù)的方法有:Thread.sleep犀填、Object.wait、Thread.join嗓违、Lock.tryLock 和 Condition.await方法九巡。
- 終止?fàn)顟B(tài)(TERMINATED):表示該線程已經(jīng)執(zhí)行完畢。
線程狀態(tài)切換
從圖中可以看出各個(gè)狀態(tài)之間的切換下面就總結(jié)一下:
- 初始狀態(tài):實(shí)現(xiàn)Runnable接口或繼承Thread類可以得到一個(gè)線程蹂季,new 一個(gè)實(shí)例線程就進(jìn)入了初始狀態(tài)
- 就緒狀態(tài):
調(diào)用start()
sleep()時(shí)間到達(dá)冕广、其他線程join()結(jié)束、線程拿到了對象鎖偿洁、等待用戶輸入完成
運(yùn)行中的線程cpu時(shí)間片用完撒汉、調(diào)用yield()方法