- 相關(guān)推薦
java線程的幾種狀態(tài)
導(dǎo)語:線程,有時(shí)被稱為輕量級進(jìn)程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。下面是Java線程的介紹,歡迎參考!
java線程的幾種狀態(tài)1
新建:new一個(gè)Thread對象或者其子類對象就是創(chuàng)建一個(gè)線程,當(dāng)一個(gè)線程對象被創(chuàng)建,但是沒有開啟,這個(gè)時(shí)候,
只是對象線程對象開辟了內(nèi)存空間和初始化數(shù)據(jù)。
就緒:新建的對象調(diào)用start方法,就開啟了線程,線程就到了就緒狀態(tài)。
在這個(gè)狀態(tài)的.線程對象,具有執(zhí)行資格,沒有執(zhí)行權(quán)。
運(yùn)行:當(dāng)線程對象獲取到了CPU的資源。
在這個(gè)狀態(tài)的線程對象,既有執(zhí)行資格,也有執(zhí)行權(quán)。
凍結(jié):運(yùn)行過程中的線程由于某些原因(比如wait,sleep),釋放了執(zhí)行資格和執(zhí)行權(quán)。
當(dāng)然,他們可以回到運(yùn)行狀態(tài)。只不過,不是直接回到。
而是先回到就緒狀態(tài)。
死亡:當(dāng)線程對象調(diào)用的run方法結(jié)束,或者直接調(diào)用stop方法,就讓線程對象死亡,在內(nèi)存中變成了垃圾。
java線程的幾種狀態(tài)2
先說結(jié)論:
Java線程中一共有6種狀態(tài),分別為:NEW、RUNNABLE、WAITING、TIMED_WAITING、BLOCKED、TERMINATED,其中RUNNABLE包含READY和RUNNING狀態(tài),詳情可見下圖:
NEW:new一個(gè)Thread對象,但沒有調(diào)用start方法前,線程處于初始狀態(tài)
RUNNABLE:在Java中包括兩種狀態(tài),RUNNING和READY
READY:就緒態(tài),該狀態(tài)下的線程已經(jīng)獲得執(zhí)行所需的所有資源,只要CPU分配執(zhí)行權(quán)就能運(yùn)行;所有就緒態(tài)的線程存放在就緒隊(duì)列中
RUNNING:獲得cpu時(shí)間片,正在執(zhí)行的線程;由于每個(gè)cpu同一時(shí)刻只能執(zhí)行一條線程,因此每個(gè)cpu每個(gè)時(shí)刻只有一條線程運(yùn)行。
BLOCKED:阻塞態(tài),當(dāng)線程請求鎖失敗時(shí),就會進(jìn)入阻塞態(tài),一旦請求成功就會進(jìn)入就緒隊(duì)列等待cpu調(diào)度;所有阻塞態(tài)的線程存放在阻塞隊(duì)列中
WAITING:等待態(tài),當(dāng)運(yùn)行中的線程調(diào)用wait、join、park函數(shù)時(shí),當(dāng)前線程進(jìn)入等待態(tài);所有等待線程放入等待隊(duì)列;等待狀態(tài)的線程需要被其他線程喚醒才能繼續(xù)運(yùn)行;進(jìn)入等待狀態(tài)會釋放cpu時(shí)間片,以及資源(一般指鎖)
TIMED_WAITING:超時(shí)等待態(tài),當(dāng)運(yùn)行中的'線程調(diào)用sleep(time)、wait(time)、parkNanos、parkUtil時(shí)會進(jìn)入超時(shí)等待態(tài);和等待態(tài)的區(qū)別就是,超時(shí)之后會加入到阻塞隊(duì)列中去。
【java線程的幾種狀態(tài)】相關(guān)文章:
java的多線程12-04
java多線程03-27
java語言的多線程11-25
Java多線程的開發(fā)技巧12-01
關(guān)于Java多線程介紹04-02
Java多線程問題總結(jié)11-27
JAVA多線程之線程間的通信方式解析04-02