7嗽元、線程的生命周期

1、線程的生命周期

新建(New)

當(dāng)一個Thread類或其子類的對象被聲明并創(chuàng)建時洁灵。新生的線程屬于新建狀態(tài)

就緒(Runnable)

除于新建狀態(tài)的線程執(zhí)行start()方法之后饱岸,進(jìn)入線程隊列等待CPU時間片掺出,該狀態(tài)具備了運行的狀態(tài),只是沒有分配到CPU資源

Java虛擬機(jī)會為其創(chuàng)建方法調(diào)用棧和程序計數(shù)器苫费,處于這個狀態(tài)的線程并沒有開始運行汤锨,它只是表示該線程可以運行了。從start()源碼中看出百框,start后添加到了線程列表中闲礼,接著在native層添加到VM中,至于該線程何時開始運行铐维,取決于JVM里線程調(diào)度器的調(diào)度(如果OS調(diào)度選中了柬泽,就會進(jìn)入到運行狀態(tài))

運行(Running)

當(dāng)就緒的線程分配到CPU資源便進(jìn)入運行狀態(tài),run()方法定義了線程的操作

阻塞(Blocked)

在某種特殊情況下嫁蛇,被人為掛起或執(zhí)行輸入輸出操作時锨并,讓出CPU并臨時終止自己的執(zhí)行,進(jìn)入阻塞狀態(tài)
理解:程序執(zhí)行到某一行時就不執(zhí)行了睬棚,等待其他條件來觸發(fā)第煮,觸發(fā)后會繼續(xù)執(zhí)行。例如開車時如果遇到了紅燈抑党,就需要停下來等待包警,當(dāng)綠燈亮?xí)r,才可以重寫發(fā)動汽車行駛

阻塞狀態(tài)是線程因為某種原因放棄CPU使用權(quán)底靠,暫時停止運行害晦。直到線程進(jìn)入就緒狀態(tài),才有機(jī)會轉(zhuǎn)到運行狀態(tài)暑中。阻塞的情況大概三種:

1壹瘟、等待阻塞:運行的線程執(zhí)行wait()方法,JVM會把該線程放入等待池中痒芝。(wait會釋放持有的鎖)
2俐筋、同步阻塞:運行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用严衬,則JVM會把該線程放入鎖池中澄者。
3、其他阻塞:運行的線程執(zhí)行sleep()或join()方法请琳,或者發(fā)出了I/O請求時粱挡,JVM會把該線程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時俄精、join()等待線程終止或者超時询筏、或者I/O處理完畢時,線程重新轉(zhuǎn)入就緒狀態(tài)竖慧。(注意,sleep是不會釋放持有的鎖)嫌套。

  • 線程睡眠:Thread.sleep(long millis)方法逆屡,使線程轉(zhuǎn)到阻塞狀態(tài)。millis參數(shù)設(shè)定睡眠的時間踱讨,以毫秒為單位魏蔗。當(dāng)睡眠結(jié)束后,就轉(zhuǎn)為就緒(Runnable)狀態(tài)痹筛。sleep()平臺移植性好莺治。

  • 線程等待:Object類中的wait()方法,導(dǎo)致當(dāng)前的線程等待帚稠,直到其他線程調(diào)用此對象的 notify() 方法或 notifyAll() 喚醒方法谣旁。這個兩個喚醒方法也是Object類中的方法,行為等價于調(diào)用 wait(0) 一樣滋早。喚醒線程后榄审,就轉(zhuǎn)為就緒(Runnable)狀態(tài)。

  • 線程讓步:Thread.yield() 方法杆麸,暫停當(dāng)前正在執(zhí)行的線程對象瘟判,把執(zhí)行機(jī)會讓給相同或者更高優(yōu)先級的線程。

  • 線程加入:join()方法角溃,等待其他線程終止。在當(dāng)前線程中調(diào)用另一個線程的join()方法篮撑,則當(dāng)前線程轉(zhuǎn)入阻塞狀態(tài)减细,直到另一個進(jìn)程運行結(jié)束,當(dāng)前線程再由阻塞轉(zhuǎn)為就緒狀態(tài)赢笨。

  • 線程I/O:線程執(zhí)行某些IO操作未蝌,因為等待相關(guān)的資源而進(jìn)入了阻塞狀態(tài)。比如說監(jiān)聽system.in茧妒,但是尚且沒有收到鍵盤的輸入萧吠,則進(jìn)入阻塞狀態(tài)。

  • 線程喚醒:Object類中的notify()方法桐筏,喚醒在此對象監(jiān)視器上等待的單個線程纸型。如果所有線程都在此對象上等待,則會選擇喚醒其中一個線程梅忌,選擇是任意性的狰腌,并在對實現(xiàn)做出決定時發(fā)生。類似的方法還有一個notifyAll()牧氮,喚醒在此對象監(jiān)視器上等待的所有線程琼腔。

死亡(Dead)

當(dāng)線程執(zhí)行自己的操作或提前被強(qiáng)制性終止或出現(xiàn)異常導(dǎo)致結(jié)束,會進(jìn)入死亡狀態(tài)
線程會以以下三種方式之一結(jié)束踱葛,結(jié)束后就處于死亡狀態(tài):
1.run()方法執(zhí)行完成丹莲,線程正常結(jié)束光坝。
2.線程拋出一個未捕獲的Exception或Error。
3.直接調(diào)用該線程的stop()方法來結(jié)束該線程——該方法容易導(dǎo)致死鎖甥材,通常不推薦使用盯另。

2、流程圖

線程的生命周期

1.新建線程擂达,創(chuàng)建一個線程的對象土铺。
2.線程對象創(chuàng)建好之后進(jìn)入就緒狀態(tài),此時會等待獲取CPU的執(zhí)行權(quán)板鬓。
3.獲取到CPU執(zhí)行權(quán)之后悲敷,線程對象開始運行。
4.在線程對象運行的過程中有可能CPU會切換到其他線程上面俭令,此時會失去執(zhí)行權(quán)重新回到第二步進(jìn)入就緒狀態(tài)后德。
5.如果線程對象在執(zhí)行過程中遇到了wait方法或者sleep方法,線程將會進(jìn)入到阻塞狀態(tài)抄腔。
6.線程對象執(zhí)行結(jié)束后會變成死亡狀態(tài)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓢湃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赫蛇,更是在濱河造成了極大的恐慌绵患,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悟耘,死亡現(xiàn)場離奇詭異落蝙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)暂幼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門筏勒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旺嬉,你說我怎么就攤上這事管行。” “怎么了邪媳?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵捐顷,是天一觀的道長。 經(jīng)常有香客問我雨效,道長套菜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任设易,我火速辦了婚禮逗柴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顿肺。我一直安慰自己戏溺,他們只是感情好渣蜗,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旷祸,像睡著了一般耕拷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上托享,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天骚烧,我揣著相機(jī)與錄音,去河邊找鬼闰围。 笑死赃绊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的羡榴。 我是一名探鬼主播碧查,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼校仑!你這毒婦竟也來了忠售?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤迄沫,失蹤者是張志新(化名)和其女友劉穎稻扬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羊瘩,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡腐螟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了困后。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡衬廷,死狀恐怖摇予,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吗跋,我是刑警寧澤侧戴,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站跌宛,受9級特大地震影響酗宋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疆拘,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一蜕猫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哎迄,春花似錦回右、人聲如沸隆圆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渺氧。三九已至,卻和暖如春蹬屹,著一層夾襖步出監(jiān)牢的瞬間侣背,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工慨默, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留贩耐,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓业筏,卻偏偏與公主長得像憔杨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蒜胖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

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

  • 來源: https://www.cnblogs.com/albertrui/p/8383799.html 一消别、前言...
    青青子衿zq閱讀 526評論 0 0
  • 林炳文Evankaka原創(chuàng)作品。轉(zhuǎn)載自http://blog.csdn.net/evankaka 本文主要講了ja...
    ccq_inori閱讀 654評論 0 4
  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類 二實現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,957評論 1 18
  • 本文主要講了java中多線程的使用方法台谢、線程同步寻狂、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法朋沮、概述等蛇券。 首先講...
    李欣陽閱讀 2,454評論 1 15
  • 摘要 在線程被創(chuàng)建并啟動以后,并不是立馬就進(jìn)入了執(zhí)行狀態(tài)樊拓,也不是一直處于執(zhí)行狀態(tài)之中纠亚。因為CPU需要在不同的線程之...
    胖瘦饅頭閱讀 264評論 0 0