成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java 幾種線程狀態(tài)之間的相互關(guān)系

lsxiao / 2555人閱讀

摘要:線程可以處于以下狀態(tài)之一尚未啟動的線程處于此狀態(tài)。被阻塞等待監(jiān)視器鎖定的線程處于此狀態(tài)。無限期等待另一個線程執(zhí)行特定操作的線程處于此狀態(tài)。已退出的線程處于此狀態(tài)。調(diào)用的線程處于狀態(tài),以使指定的線程終止。

Java Thread 可能處在以下幾種狀態(tài)

Java Doc 里通過一個枚舉類型 Enum 來定義。

線程可以處于以下狀態(tài)之一:

NEW 尚未啟動的線程處于此狀態(tài)。

RUNNABLE 在Java虛擬機(jī)中執(zhí)行的線程處于此狀態(tài)。

BLOCKED 被阻塞等待監(jiān)視器鎖定的線程處于此狀態(tài)。

WAITING 無限期等待另一個線程執(zhí)行特定操作的線程處于此狀態(tài)。

TIMED_WAITING 正在等待另一個線程執(zhí)行最多指定等待時間的操作的線程處于此狀態(tài)。

TERMINATED 已退出的線程處于此狀態(tài)。

線程在給定時間點只能處于一種狀態(tài)。這些狀態(tài)是虛擬機(jī)狀態(tài),不反映任何操作系統(tǒng)線程狀態(tài)。

通過示例而不是Java doc中給出的正式定義,可以很容易地理解任何令人困惑的概念。如果它們是現(xiàn)實生活中的例子,它可能更具有相關(guān)性。我想分享一些可能有助于理解這些線程狀態(tài)的現(xiàn)實例子。

由 http://fastthread.io 生成的傳遞圖,顯示哪些線程阻塞了哪些線程

BLOCKED 阻塞

Java doc正式將BLOCKED狀態(tài)定義為:“阻塞等待監(jiān)視器鎖的線程處于此狀態(tài)?!?/p>

現(xiàn)實生活中的例子:今天你要去面試。這是您夢寐以求的工作,這是您過去幾年一直瞄準(zhǔn)的目標(biāo)。你早上醒來,準(zhǔn)備好了,穿上你最好的衣服,在鏡子前面看起來很敏銳?,F(xiàn)在你走出你的車庫,意識到你的妻子已經(jīng)開車了。在這種情況下,你只有一輛車,那么會發(fā)生什么?在現(xiàn)實生活中,可能會發(fā)生斗爭:-)。在這里你被阻止,因為你的妻子已經(jīng)開車了。你將無法參加面試。

這是BLOCKED狀態(tài)。用技術(shù)術(shù)語解釋它,你是線程T1,你的妻子是線程T2,鎖是汽車。T1在鎖(即汽車)上被阻擋,因為T2已經(jīng)獲得了這個鎖。

提示:線程在等待監(jiān)視器鎖進(jìn)入同步塊/方法或在調(diào)用Object#wait()方法后重新輸入同步塊/方法時,將進(jìn)入BLOCKED狀態(tài)。

WAITING 等候

Java doc正式將WAITING狀態(tài)定義為:“無限期等待另一個線程執(zhí)行特定操作的線程處于此狀態(tài)?!?/p>

現(xiàn)實生活中的例子:讓我們說幾分鐘后你的妻子帶著車回家了。現(xiàn)在你意識到面試的時間已經(jīng)到了,而且到達(dá)那里還有很長的路要走。因此,您將所有動力都放在汽車的油門踏板上。當(dāng)允許的速度限制僅為60英里/小時時,您以100英里/小時的速度行駛。你不走運,交通警察看到你超過限速,他把你拉到路邊?,F(xiàn)在你進(jìn)入WAITING狀態(tài),我的朋友。你停止開車,坐在車?yán)镩e逛,直到警察調(diào)查你,然后讓你走?;旧希谒屇汶x開之前,你會陷入等待狀態(tài)。

用技術(shù)術(shù)語解釋它,你是線程T1,警察是線程T2。你釋放鎖(即你停止開車),然后進(jìn)入等待狀態(tài)。直到警察(即T2)讓你離開,你將陷入這種等待狀態(tài)。

提示:線程在調(diào)用以下方法之一時將進(jìn)入WAITING狀態(tài):

Object#wait() 未指定超時時間

Thread#join() 未指定超時時間

LockSupport#park()

在對象上調(diào)用Object.wait()的線程處于WAITING狀態(tài),直到另一個線程調(diào)用該對象上的Object.notify()或Object.notifyAll()。調(diào)用Thread.join()的線程處于WAITING狀態(tài),以使指定的線程終止。

TIMED_WAITING 指定時間的等待

Java doc正式將TIMED_WAITING狀態(tài)定義為:“等待另一個線程在指定的等待時間內(nèi)執(zhí)行操作的線程處于此狀態(tài)?!?/p>

現(xiàn)實生活中的例子: 盡管所有的戲劇性,你在采訪中表現(xiàn)得非常好,給每個人留下了深刻的印象并得到了這份高薪工作。(恭喜?。┠慊氐郊依?,告訴你的鄰居關(guān)于這份新工作,以及你對此感到非常興奮。你的朋友說他也在同一棟辦公樓工作。他建議你們兩個應(yīng)該一起開車。你認(rèn)為這是一個好主意。所以在工作的第一天,你去他家。你把車停在他家門口。你等了10分鐘,但你的鄰居仍然沒有出來。你繼續(xù)開始上班,因為你不想在第一天被推遲?,F(xiàn)在這是TIMED_WAITING。

用技術(shù)術(shù)語解釋它,你是線程T1,你的鄰居是線程T2。你釋放鎖定(即停止駕駛汽車)并等待長達(dá) 10分鐘。如果你的鄰居T2在10分鐘內(nèi)沒出來,你就開始再次開車了。

提示:線程在調(diào)用以下方法之一時將進(jìn)入TIMED_WAITING狀態(tài):

Thread#sleep()

Object#wait() 指定超時時間

Thread#join() 指定超時時間

LockSupport#parkNanos()

LockSupport#parkUntil()

結(jié)論

當(dāng)有人在分析線程轉(zhuǎn)儲時,理解這些不同的線程狀態(tài)是至關(guān)重要的。處于RUNNABLE,BLOCKED,WAITING和TIMED_WATING狀態(tài)的線程數(shù)是多少?哪些線程被阻止?誰阻止了他們?用于鎖定的對象是什么?這些是在線程轉(zhuǎn)儲中要分析的一些重要指標(biāo)。這些詳細(xì)的線程轉(zhuǎn)儲分析可以通過在線工具輕松完成,例如:http://fastthread.io/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72784.html

相關(guān)文章

  • 史上最全阿里 Java 面試題總結(jié)

    摘要:以下為大家整理了阿里巴巴史上最全的面試題,涉及大量面試知識點和相關(guān)試題。的內(nèi)存結(jié)構(gòu),和比例。多線程多線程的幾種實現(xiàn)方式,什么是線程安全。點擊這里有一套答案版的多線程試題。線上系統(tǒng)突然變得異常緩慢,你如何查找問題。 以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識點和相關(guān)試題。 JAVA基礎(chǔ) JAVA中的幾種基本數(shù)據(jù)類型是什么,各自占用多少字節(jié)。 S...

    winterdawn 評論0 收藏0
  • Java 并發(fā)學(xué)習(xí)筆記

    摘要:方法可以將當(dāng)前線程放入等待集合中,并釋放當(dāng)前線程持有的鎖。此后,該線程不會接收到的調(diào)度,并進(jìn)入休眠狀態(tài)。該線程會喚醒,并嘗試恢復(fù)之前的狀態(tài)。 并發(fā) 最近重新復(fù)習(xí)了一邊并發(fā)的知識,發(fā)現(xiàn)自己之前對于并發(fā)的了解只是皮毛。這里總結(jié)以下Java并發(fā)需要掌握的點。 使用并發(fā)的一個重要原因是提高執(zhí)行效率。由于I/O等情況阻塞,單個任務(wù)并不能充分利用CPU時間。所以在單處理器的機(jī)器上也應(yīng)該使用并發(fā)。為...

    DrizzleX 評論0 收藏0
  • 【面試】Java相關(guān)

    摘要:可能會持有相同的值對象但鍵對象必須是唯一的。當(dāng)有新任務(wù)到達(dá)時,線程池沒有線程則創(chuàng)建線程處理,處理完成后該線程緩存秒,過期后回收,線程過期前有新任務(wù)到達(dá)時,則使用緩存的線程來處理。解決死鎖問題的三種方法預(yù)防死鎖檢測死鎖及避免死鎖。 最近辭職準(zhǔn)備面試,順便整理一下面試題分享給大家,如有錯誤歡迎指出 01. 你對面向?qū)ο笏枷氲睦斫猓?面向?qū)ο缶幊毯喎QOOP,是開發(fā)程序的一種方法、思想。面向...

    icattlecoder 評論0 收藏0
  • 超詳細(xì)Java面試題總結(jié)(二)之Java基礎(chǔ)知識篇

    摘要:超詳細(xì)的面試題總結(jié)一之基本知識多線程和虛擬機(jī)創(chuàng)建線程有幾種不同的方式你喜歡哪一種為什么繼承類實現(xiàn)接口應(yīng)用程序可以使用框架來創(chuàng)建線程池實現(xiàn)接口。死亡線程方法執(zhí)行結(jié)束,或者因異常退出了方法,則該線程結(jié)束生命周期。死亡的線程不可再次復(fù)生。 超詳細(xì)的Java面試題總結(jié)(一)之Java基本知識 多線程和Java虛擬機(jī) 創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么? 繼承Thread類 實現(xiàn)R...

    wangjuntytl 評論0 收藏0
  • 【備戰(zhàn)春招/秋招系列】美團(tuán)面經(jīng)總結(jié)基礎(chǔ)篇 (附詳解答案)

    摘要:不同于個人面經(jīng),這份面經(jīng)具有普適性。我在前面的文章中也提到了應(yīng)該怎么做自我介紹與項目介紹,詳情可以查看這篇文章備戰(zhàn)春招秋招系列初出茅廬的程序員該如何準(zhǔn)備面試。是建立連接時使用的握手信號。它表示確認(rèn)發(fā)來的數(shù)據(jù)已經(jīng)接受無誤。 showImg(https://segmentfault.com/img/remote/1460000016972448?w=921&h=532); 該文已加入開源文...

    Leck1e 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<