JAVA學(xué)習(xí)筆記--線程狀態(tài)及對(duì)象鎖

JAVA學(xué)習(xí)筆記--線程狀態(tài)及對(duì)象鎖

https://my.oschina.net/goldenshaw/blog?catalog=3277710&temp=1499785479453

[TOC]

一、線程狀態(tài)

  1. 【NEW】 新建尚未運(yùn)行

    還沒調(diào)用start童漩,或者調(diào)用了start()方法沸久,不一定立即改變線程狀態(tài),中間可能需要一些步驟才完成一個(gè)線程的啟動(dòng)

  2. 【RUNNABLE】 處于可運(yùn)行狀態(tài):正在運(yùn)行或準(zhǔn)備運(yùn)行

    start調(diào)用結(jié)束扮碧,線程由NEW變成RUNNABLE,存活著并嘗試占用CPU資源,yield操作,線程還是RUNNABLE狀態(tài)豁生,只是他有一個(gè)細(xì)節(jié)的內(nèi)部變化酸纲,做一個(gè)簡(jiǎn)單的讓步捣鲸。在JAVA層面是RUNNABLE的狀態(tài),并不代表一定處于運(yùn)行中的狀態(tài)闽坡,比例BIO中栽惶,線程正阻塞在網(wǎng)絡(luò)等待的時(shí)候愁溜,看到的狀態(tài)依然是RUNNABLE狀態(tài),而底層線程已經(jīng)被阻塞了外厂。

  3. 【BLOCKED】 等待獲取鎖時(shí)進(jìn)入的狀態(tài)

    線程被掛起了冕象,通常是因?yàn)樗诘却粋€(gè)鎖,當(dāng)synchronized正好有線程在使用時(shí)汁蝶,另外一個(gè)線程嘗試進(jìn)入這個(gè)臨界區(qū)就會(huì)被阻塞渐扮,直到另一個(gè)線程走完臨界區(qū),或者發(fā)生響應(yīng)鎖對(duì)象的wait操作掖棉,他才有機(jī)會(huì)去爭(zhēng)奪臨界區(qū)的權(quán)利墓律。搶到鎖之后,狀態(tài)從阻塞轉(zhuǎn)到RUNNABLE
    線程等待IO操作會(huì)進(jìn)入BLOCKED狀態(tài)

  4. 【W(wǎng)AITING】 通過wait方法進(jìn)入的等待

    當(dāng)wart/join/park方法調(diào)用后幔亥,無限期地等待另一個(gè)線程來執(zhí)行某一特定操作的線程處于WAITING狀態(tài)耻讽。

  5. 【TIMED_WAITING】 等待另一個(gè)線程來執(zhí)行取決于指定等待時(shí)間的操作的線程處于這種狀態(tài)。

    通過wait(t),sleep(t),join(t),parkNanos,parkUntil等方法進(jìn)入此狀態(tài)帕棉。當(dāng)時(shí)間達(dá)到時(shí)觸發(fā)線程回到工作狀態(tài)Runnable针肥。
    interrupt只對(duì)處于waiting或timed_waiting狀態(tài)的線程起作用,對(duì)其他狀態(tài)不起作用香伴。

  6. 【TERMINATED】 已退出的線程處于這種狀態(tài)慰枕。

    線程結(jié)束了,就處于這種狀態(tài)瞒窒,也就是run方法運(yùn)行完了捺僻。在操作系統(tǒng)內(nèi)部可能已經(jīng)注銷了相應(yīng)的線程,或者將它復(fù)用給其他需要使用線程的請(qǐng)求崇裁。

New->Runnable: start()
Runnable->Blocked: lock
Blocked-->Runnable: unLock
Runnable->Waiting: wait()/sleep()/join()/IO
Waiting-->Runnable: wait匕坯、sleep、join結(jié)束/IO結(jié)束
Runnable->Timed_waiting: wait(T)/sleep(T)/join(T)
Timed_waiting-->Runnable: wait拔稳、sleep葛峻、join時(shí)間到
Runnable->Terminated: 正常退出/異常

BLOCKED和WAITING狀態(tài)區(qū)別:
A、blocked是虛擬機(jī)認(rèn)為程序還不能進(jìn)入某個(gè)區(qū)域巴比,因?yàn)橥瑫r(shí)進(jìn)去就會(huì)有問題术奖,這是一塊臨界區(qū)。
B轻绞、發(fā)生wait等操作的先決條件是要進(jìn)入臨界區(qū)采记,也就是線程已經(jīng)拿到鎖了,自己可能進(jìn)去做了一些事情政勃,但此時(shí)通過判定業(yè)務(wù)上的參數(shù)唧龄,發(fā)現(xiàn)還有一些其他配合的資源沒有準(zhǔn)備充分,那么自己就等等再做其他事情奸远。

在waiting狀態(tài)下既棺,如果發(fā)生了interrupt操作讽挟,則處于該狀態(tài)的線程在內(nèi)部會(huì)拋出一個(gè)InterruptedException【跑出異常后,線程還需要獲取到對(duì)應(yīng)鎖才能繼續(xù)執(zhí)行后續(xù)操作】丸冕,這個(gè)異常應(yīng)當(dāng)在run方法內(nèi)捕獲耽梅,使得run方法正常地執(zhí)行完成,當(dāng)然捕獲異常后胖烛,是決定讓線程繼續(xù)運(yùn)行眼姐,還是結(jié)束等要根據(jù)業(yè)務(wù)場(chǎng)景才處理。

IO操作會(huì)導(dǎo)致線程進(jìn)入WAITING狀態(tài) 參考 https://my.oschina.net/goldenshaw/blog/705397

線程狀態(tài)轉(zhuǎn)換圖 -w600

二洪己、對(duì)象鎖

  1. 所有對(duì)象都自動(dòng)含有單一的鎖
  2. JVM負(fù)責(zé)跟蹤對(duì)象被加鎖的次數(shù)妥凳。第一個(gè)線程第一次獲取到對(duì)象鎖時(shí)候,鎖計(jì)數(shù)為1答捕,此線程再次獲取這個(gè)對(duì)象的鎖計(jì)數(shù)加一,釋放一次減一直到全部釋放(計(jì)數(shù)為0)其他線程才可以獲取此對(duì)象的鎖屑那。
  3. 只有首先獲得鎖的任務(wù)(線程)才能繼續(xù)獲取該對(duì)象上的多個(gè)鎖拱镐。

Object.wait()

線程必須先獲取到對(duì)象監(jiān)視鎖,才能調(diào)用此方法持际。執(zhí)行此方法線程立即釋放對(duì)象監(jiān)視鎖,當(dāng)前線程阻塞沃琅。若方法拋出InterruptedException異常,同樣需要獲取鎖才能繼續(xù)往下執(zhí)行

Object.notify()

線程必須先獲取到對(duì)象監(jiān)視鎖蜘欲,才能調(diào)用此方法益眉。執(zhí)行此方法會(huì)喚起wait的線程,當(dāng)前線程不會(huì)立即是否鎖姥份,直到臨界區(qū)代碼庫執(zhí)行完線程釋放鎖之后郭脂,其他線程才有機(jī)會(huì)去競(jìng)爭(zhēng)鎖。

Thread.sleep() //當(dāng)前線程阻塞澈歉,不釋放鎖
Thread.yield() //讓出CPU執(zhí)行時(shí)間展鸡,不釋放鎖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市埃难,隨后出現(xiàn)的幾起案子莹弊,更是在濱河造成了極大的恐慌,老刑警劉巖涡尘,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忍弛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡考抄,警方通過查閱死者的電腦和手機(jī)细疚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來座泳,“玉大人惠昔,你說我怎么就攤上這事幕与。” “怎么了镇防?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵啦鸣,是天一觀的道長。 經(jīng)常有香客問我来氧,道長诫给,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任啦扬,我火速辦了婚禮中狂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扑毡。我一直安慰自己胃榕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布瞄摊。 她就那樣靜靜地躺著勋又,像睡著了一般。 火紅的嫁衣襯著肌膚如雪换帜。 梳的紋絲不亂的頭發(fā)上楔壤,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音惯驼,去河邊找鬼蹲嚣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祟牲,可吹牛的內(nèi)容都是我干的隙畜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼疲眷,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼禾蚕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起狂丝,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤换淆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后几颜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倍试,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年蛋哭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了县习。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖躁愿,靈堂內(nèi)的尸體忽然破棺而出叛本,到底是詐尸還是另有隱情,我是刑警寧澤彤钟,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布来候,位于F島的核電站,受9級(jí)特大地震影響逸雹,放射性物質(zhì)發(fā)生泄漏营搅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一梆砸、第九天 我趴在偏房一處隱蔽的房頂上張望转质。 院中可真熱鬧,春花似錦帖世、人聲如沸休蟹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸡挠。三九已至,卻和暖如春搬男,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彭沼。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工缔逛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姓惑。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓褐奴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親于毙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敦冬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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