Thread-線程的生命周期

線程的生命周期

線程生命周期

New

當(dāng)我們使用關(guān)鍵字new 創(chuàng)建一個(gè)線程對(duì)象時(shí),此時(shí)它并不是處于執(zhí)行狀態(tài)嘹叫,因?yàn)椴]有調(diào)用start()啟動(dòng)該線程,這時(shí)只是Thread對(duì)象的的狀態(tài)(New), 也即沒有start之前诈乒, 該線程根本不存在待笑,與我們用new 創(chuàng)建一個(gè)普通對(duì)象沒有什么區(qū)別。
New 狀態(tài)通過start方法進(jìn)入Runnable狀態(tài)

Runnable

調(diào)用了線程對(duì)象的start方法抓谴,線程狀態(tài)此時(shí)進(jìn)入Runnable狀態(tài),此時(shí)才是真正的在JVM中創(chuàng)建了一個(gè)線程寞缝, 這是線程不一定立即得到執(zhí)行癌压,這是由于線程的運(yùn)行與否和進(jìn)程一樣都要聽命于CPU的調(diào)度,這個(gè)中間狀態(tài)就是線程的可執(zhí)行狀態(tài)(Runnable), 這是也就是說線程具備了執(zhí)行的資格荆陆,但是并沒有執(zhí)行滩届,而是在等待CPU的調(diào)度。
注意: 此時(shí)的Runnable狀態(tài)被啼,不會(huì)直接進(jìn)入Blocked或者Terminated狀態(tài)帜消,即使是在線程執(zhí)行邏輯中調(diào)用wait, sleep或者其他block的IO操作等浓体,也必須先獲得CPU的調(diào)度執(zhí)行權(quán)才可以泡挺, 嚴(yán)格來講,Runnable的線程只能意外終止或者進(jìn)入Running狀態(tài)命浴。

Running

一旦CPU通過輪詢或者其他方式從任務(wù)可執(zhí)行隊(duì)列中選中了線程娄猫,此時(shí)才可能真正執(zhí)行自己的邏輯代碼(run方法中的代碼)贱除, 這里需要說明的是一個(gè)正在Running的線程事實(shí)上也是Runnable的, 但是反過來則不成立媳溺。

該狀態(tài)下線程可發(fā)生如下轉(zhuǎn)換:

  • 直接進(jìn)入Terminated狀態(tài)月幌,比如調(diào)用JDK已經(jīng)不推薦使用的stop方法或者判斷某個(gè)邏輯標(biāo)識(shí)
  • 進(jìn)入Blocked狀態(tài),比如調(diào)用sleep或者wait 方法而進(jìn)入waitSet中
  • 進(jìn)行某個(gè)阻塞的IO操作悬蔽,比如因網(wǎng)絡(luò)數(shù)據(jù)的讀寫而進(jìn)入Blocked狀態(tài)
  • 獲取某個(gè)鎖資源扯躺,從而加入到該鎖的阻塞隊(duì)列中而進(jìn)入Blocked狀態(tài)
  • 由于CPU的調(diào)度器輪詢是該線程放棄執(zhí)行,進(jìn)入Runnable狀態(tài)
  • 線程主動(dòng)調(diào)用yield方法蝎困,放棄CPU的執(zhí)行權(quán)录语,進(jìn)入Runnable狀態(tài)

Blocked

  1. 調(diào)用sleep或者wait 方法而進(jìn)入waitSet中
  2. 進(jìn)行某個(gè)阻塞的IO操作,比如因網(wǎng)絡(luò)數(shù)據(jù)的讀寫
  3. 獲取某個(gè)鎖資源难衰,從而加入到該鎖的阻塞隊(duì)列中

線程在該狀態(tài)下可以切換的狀態(tài)如下:

  • 直接進(jìn)入Terminated狀態(tài)钦无,比如調(diào)用JDK已經(jīng)不推薦使用的stop方法或者意外死亡(JVM Crash)
  • 線程阻塞的操作結(jié)束, 比如讀取到了想要的數(shù)據(jù)進(jìn)入到Runnable狀態(tài)
  • 線程完成了指定時(shí)間的休眠盖袭,進(jìn)入到Runnable狀態(tài)
  • Wait中的線程被其他線程notify或者notifyAll喚醒失暂, 進(jìn)入Runnable狀態(tài)
  • 線程獲取到了某個(gè)鎖資源,進(jìn)入Runnable狀態(tài)
  • 線程在阻塞過程中被打斷鳄虱, 比如其他線程調(diào)用了interrupt方法弟塞, 進(jìn)入Runnable狀態(tài)

Terminated

Terminated 狀態(tài)是線程的最終狀態(tài),在該狀態(tài)中線程將不會(huì)切換到其他的任何狀態(tài)拙已, 線程進(jìn)入Terminated狀態(tài)决记,意味著該線程的整個(gè)生命周期都結(jié)束了。

下列情況將會(huì)使線程進(jìn)入Terminated狀態(tài):

  • 線程運(yùn)行正常結(jié)束倍踪,結(jié)束生命周期
  • 線程運(yùn)行出錯(cuò)意外結(jié)束
  • JVM Crash, 導(dǎo)致所有的線程都結(jié)束

參考

Java 高并發(fā)編程詳解 多線程與架構(gòu)設(shè)計(jì) 汪文君 著

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末系宫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子建车,更是在濱河造成了極大的恐慌扩借,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缤至,死亡現(xiàn)場(chǎng)離奇詭異潮罪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)领斥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門嫉到,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人月洛,你說我怎么就攤上這事何恶。” “怎么了嚼黔?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵导而,是天一觀的道長(zhǎng)忱叭。 經(jīng)常有香客問我,道長(zhǎng)今艺,這世上最難降的妖魔是什么韵丑? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮虚缎,結(jié)果婚禮上撵彻,老公的妹妹穿的比我還像新娘。我一直安慰自己实牡,他們只是感情好陌僵,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著创坞,像睡著了一般碗短。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上题涨,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天偎谁,我揣著相機(jī)與錄音,去河邊找鬼纲堵。 笑死巡雨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的席函。 我是一名探鬼主播铐望,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼茂附!你這毒婦竟也來了正蛙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤营曼,失蹤者是張志新(化名)和其女友劉穎跟畅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體署恍,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弓熏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旅赢。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糊探,靈堂內(nèi)的尸體忽然破棺而出括享,到底是詐尸還是另有隱情,我是刑警寧澤硝训,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布响委,位于F島的核電站新思,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赘风。R本人自食惡果不足惜夹囚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邀窃。 院中可真熱鬧荸哟,春花似錦、人聲如沸瞬捕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肪虎。三九已至劣砍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扇救,已是汗流浹背刑枝。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爵政,地道東北人仅讽。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像钾挟,于是被迫代替她去往敵國和親洁灵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 通用的線程生命周期 五態(tài)模型: 初始狀態(tài)掺出、可運(yùn)行狀態(tài)徽千、運(yùn)行狀態(tài)、休眠狀態(tài)汤锨、終止?fàn)顟B(tài) 初始狀態(tài):指的線程已經(jīng)被創(chuàng)建双抽,...
    George吳逸云閱讀 152評(píng)論 0 0
  • 一牍汹、通用的線程生命周期 五態(tài):初始狀態(tài)、可運(yùn)行狀態(tài)柬泽、休眠狀態(tài)慎菲、運(yùn)行狀態(tài)、終止?fàn)顟B(tài)锨并。 初始狀態(tài)露该,指的是線程已經(jīng)被創(chuàng)建...
    追風(fēng)箏的人_fbf8閱讀 159評(píng)論 0 0
  • 通用的線程生命周期 初始狀態(tài) 指的是線程已經(jīng)被創(chuàng)建,但是還不允許分配CPU執(zhí)行第煮。這個(gè)狀態(tài)屬于編程語言特有的解幼,不過這...
    Easy的幸福閱讀 298評(píng)論 0 0
  • 通用的線程生命周期通用的線程生命周期基本上可以用下圖這個(gè)“五態(tài)模型”來描述抑党。這五態(tài)分別是:初始狀 態(tài)、可運(yùn)行狀態(tài)撵摆、...
    woshishui1243閱讀 189評(píng)論 0 0
  • 1. 初始狀態(tài) 線程已經(jīng)被創(chuàng)建底靠,但還不允許分配CPU執(zhí)行 該狀態(tài)屬于 編程語言 所特有,僅僅在編程語言層面被創(chuàng)建台汇,...
    4553675200ad閱讀 299評(píng)論 0 0