Java 線程的狀態(tài)及切換

線程的生命周期

Java語(yǔ)言中定義了5種線程狀態(tài),在任意一個(gè)時(shí)間點(diǎn),一個(gè)線程只能有且只有其中一種狀態(tài)祸泪,這5種狀態(tài)是:

  • 新建(New):創(chuàng)建后尚未啟動(dòng)的線程處于這種狀態(tài)。
  • 運(yùn)行(Runable):包括了操作系統(tǒng)線程狀態(tài)中的Running和Ready建芙,也就是處于此狀態(tài)的線程有可能正在執(zhí)行没隘,也有可能正在等待著CPU為它分配執(zhí)行時(shí)間。
  • 無(wú)限期等待(Waiting):處于這種狀態(tài)的線程不會(huì)被分配CPU執(zhí)行時(shí)間岁钓,它們要等待被其他線程顯式地喚醒升略。以下方法會(huì)讓線程陷入無(wú)限期的等待狀態(tài):
    • 沒(méi)有設(shè)置timeout參數(shù)的Object.wait()方法;
    • 沒(méi)有設(shè)置timeout參數(shù)的Thread.join()方法屡限;
    • LockSupport.park()方法;
  • 限期等待(Timed Waiting):處于這種狀態(tài)的線程也不會(huì)被分配CPU執(zhí)行時(shí)間炕倘,不過(guò)無(wú)須等待被其他線程顯式地喚醒钧大,在一定時(shí)間之后它們會(huì)由操作系統(tǒng)自動(dòng)喚醒。以下方法會(huì)讓線程進(jìn)入限期等待狀態(tài):
    • Thread.sleep()方法罩旋;
    • 設(shè)置了timeout參數(shù)的Object.wait()方法啊央;
    • 設(shè)置了timeout參數(shù)的Thread.join()方法;
    • LockSupport.parkNanos()方法涨醋;
    • LockSupport.parkUntil()方法瓜饥;
  • 阻塞(Blocked):線程被阻塞了,“阻塞狀態(tài)”與“等待狀態(tài)”的區(qū)別是:“阻塞狀態(tài)”在等待著獲取到一個(gè)排它鎖浴骂,這個(gè)事件將在另外一個(gè)線程放棄這個(gè)鎖的時(shí)候發(fā)生乓土;而“等待狀態(tài)”則是在等待一段時(shí)間,或者喚醒動(dòng)作的發(fā)生溯警。在程序等待進(jìn)入同步區(qū)域(synchronized)的時(shí)候趣苏,線程將進(jìn)入這種狀態(tài)。
  • 結(jié)束(Terminated):已終止的線程狀態(tài)梯轻,線程已經(jīng)結(jié)束執(zhí)行食磕。

線程間的狀態(tài)轉(zhuǎn)換

1、新建(New)

新創(chuàng)建了一個(gè)線程對(duì)象喳挑,還未調(diào)用start()方法彬伦。

Thread thread = new Thread();

2、就緒(Ready)

線程對(duì)象創(chuàng)建后伊诵,其他線程(比如main線程)調(diào)用了該對(duì)象的start()方法单绑。該狀態(tài)的線程位于可運(yùn)行線程池中,等待被線程調(diào)度選中 獲取cpu 的使用權(quán) 日戈。

3询张、運(yùn)行中(Running)

可運(yùn)行狀態(tài)(runnable)的線程獲得了cpu 時(shí)間片(timeslice) ,執(zhí)行程序代碼浙炼。

4份氧、限期等待(Timed Waiting)

也可以稱作 TIMED_WAITING(有等待時(shí)間的等待狀態(tài))唯袄。

線程主動(dòng)調(diào)用以下方法:

  • Thread.sleep方法;
  • Object的wait方法蜗帜,帶有時(shí)間恋拷;
  • Thread.join方法,帶有時(shí)間厅缺;
  • LockSupport的parkNanos方法蔬顾,帶有時(shí)間。

5湘捎、無(wú)限期等待(Waiting)

運(yùn)行中(Running)的線程執(zhí)行了以下方法:

  • Object的wait方法诀豁,并且沒(méi)有使用timeout參數(shù);
  • Thread的join方法,沒(méi)有使用timeout參數(shù)窥妇;
  • LockSupport的park方法舷胜;
  • Conditon的await方法。

6活翩、阻塞(Blocked)

阻塞狀態(tài)是指線程因?yàn)槟撤N原因放棄了cpu 使用權(quán)烹骨,暫時(shí)停止運(yùn)行。直到線程進(jìn)入可運(yùn)行(runnable)狀態(tài)材泄,才有機(jī)會(huì)再次獲得cpu timeslice 轉(zhuǎn)到運(yùn)行(running)狀態(tài)沮焕。阻塞的情況分兩種:

  • 同步阻塞:運(yùn)行(running)的線程進(jìn)入了一個(gè)synchronized方法,若該同步鎖被別的線程占用拉宗,則JVM會(huì)把該線程放入鎖池(lock pool)中峦树。
  • 其他阻塞:運(yùn)行(running)的線程發(fā)出了I/O請(qǐng)求時(shí),JVM會(huì)把該線程置為阻塞狀態(tài)簿废。當(dāng)I/O處理完畢時(shí)空入,線程重新轉(zhuǎn)入可運(yùn)行(runnable)狀態(tài)。

7族檬、結(jié)束(Terminated)

線程run()歪赢、main() 方法執(zhí)行結(jié)束,或者因異常退出了run()方法单料,則該線程結(jié)束生命周期埋凯。

參考資料

線程的生命周期

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市扫尖,隨后出現(xiàn)的幾起案子白对,更是在濱河造成了極大的恐慌,老刑警劉巖换怖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甩恼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)条摸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門悦污,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人钉蒲,你說(shuō)我怎么就攤上這事切端。” “怎么了顷啼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵踏枣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我钙蒙,道長(zhǎng)茵瀑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任躬厌,我火速辦了婚禮瘾婿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烤咧。我一直安慰自己,他們只是感情好抢呆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布煮嫌。 她就那樣靜靜地躺著,像睡著了一般抱虐。 火紅的嫁衣襯著肌膚如雪昌阿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天恳邀,我揣著相機(jī)與錄音懦冰,去河邊找鬼。 笑死谣沸,一個(gè)胖子當(dāng)著我的面吹牛刷钢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乳附,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼内地,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赋除?” 一聲冷哼從身側(cè)響起阱缓,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎举农,沒(méi)想到半個(gè)月后荆针,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年航背,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喉悴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沃粗,死狀恐怖粥惧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情最盅,我是刑警寧澤突雪,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站涡贱,受9級(jí)特大地震影響咏删,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜问词,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一督函、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧激挪,春花似錦辰狡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至薄湿,卻和暖如春叫倍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豺瘤。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工吆倦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坐求。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓蚕泽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瞻赶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赛糟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容