Java線程生命周期

并發(fā)面試話術(shù)

image.png

線程安全

  • 經(jīng)常用來描繪一段代碼赎懦。指在并發(fā)的情況下分瘾,該代碼經(jīng)過多線程使用,線程的調(diào)度順序不影響任何結(jié)果具滴。這個時候使用多線程蚂维,我們只需要關(guān)注系統(tǒng)的內(nèi)存,CPU是不是夠用力图。反過來步绸,線程不安全就意味著線程的順序會影響最終結(jié)果掺逼。
  • 如果你的代碼在多線程下執(zhí)行和在單線程下執(zhí)行永遠都能獲得一樣的結(jié)果,那么你的代碼就是線程安全的瓤介。

同步
Java中的同步指的是通過人為的控制和調(diào)度吕喘,保證共享資源的多線程訪問成為線程安全,來保證結(jié)果的準確刑桑。如簡單的加入synchronized關(guān)鍵字氯质。在保證結(jié)果準確的同時,提高性能祠斧,才是優(yōu)秀的程序闻察。線程安全的優(yōu)先級高于性能。

當線程被創(chuàng)建并啟動以后琢锋,它既不是一啟動就進入了執(zhí)行狀態(tài)辕漂,也不是一直處于執(zhí)行狀態(tài)。在線程的生命周期中吴超,它要經(jīng)過新建(New)钉嘹、就緒(Runnable)、運行(Running)鲸阻、阻塞(Blocked)和死亡(Dead)5種狀態(tài)跋涣。尤其是當線程啟動以后,它不可能一直"霸占"著CPU獨自運行鸟悴,所以CPU需要在多條線程之間切換陈辱,于是線程狀態(tài)也會多次在運行、阻塞之間切換

    1. 新建狀態(tài)细诸,當程序使用new關(guān)鍵字創(chuàng)建了一個線程之后性置,該線程就處于新建狀態(tài),此時僅由JVM為其分配內(nèi)存揍堰,并初始化其成員變量的值
    1. 就緒狀態(tài)鹏浅,當線程對象調(diào)用了start()方法之后嗅义,該線程處于就緒狀態(tài)。Java虛擬機會為其創(chuàng)建方法調(diào)用棧和程序計數(shù)器隐砸,等待調(diào)度運行
    1. 運行狀態(tài)之碗,如果處于就緒狀態(tài)的線程獲得了CPU,開始執(zhí)行run()方法的線程執(zhí)行體季希,則該線程處于運行狀態(tài)
    1. 阻塞狀態(tài)褪那,當處于運行狀態(tài)的線程失去所占用資源之后,便進入阻塞狀態(tài)
    1. 在線程的生命周期當中式塌,線程的各種狀態(tài)的轉(zhuǎn)換過程


      image.png

同步隊列(鎖池):假設(shè)線程A已經(jīng)擁有了某個對象(注意:不是類)的鎖博敬,而其它的線程想要調(diào)用這個對象的某個synchronized方法(或者synchronized塊),由于這些線程在進入對象的synchronized方法之前必須先獲得該對象的鎖的擁有權(quán)峰尝,但是該對象的鎖目前正被線程A擁有偏窝,所以這些線程就進入了該對象的同步隊列(鎖池)中,這些線程狀態(tài)為Blocked武学。

等待隊列(等待池):假設(shè)一個線程A調(diào)用了某個對象的wait()方法祭往,線程A就會釋放該對象的鎖(因為wait()方法必須出現(xiàn)在synchronized中,這樣自然在執(zhí)行wait()方法之前線程A就已經(jīng)擁有了該對象的鎖)火窒,同時 線程A就進入到了該對象的等待隊列(等待池)中硼补,此時線程A狀態(tài)為Waiting。如果另外的一個線程調(diào)用了相同對象的notifyAll()方法熏矿,那么 處于該對象的等待池中的線程就會全部進入該對象的同步隊列(鎖池)中已骇,準備爭奪鎖的擁有權(quán)。如果另外的一個線程調(diào)用了相同對象的notify()方法票编,那么 僅僅有一個處于該對象的等待池中的線程(隨機)會進入該對象的同步隊列(鎖池)褪储。

引用文章

image.png

守護線程與用戶線程
守護線程與用戶的區(qū)別在于:守護線程依賴于創(chuàng)建它的線程,而用戶線程不依賴栏妖。如果在main線程里創(chuàng)建一個守護線程乱豆,當main方法運行完畢以后,守護線程也會隨著消亡吊趾。而用戶線程則不會宛裕,用戶線程會一直運行到其運行完畢。在JVM中论泛,垃圾收集器就是守護線程揩尸。

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屁奏,隨后出現(xiàn)的幾起案子岩榆,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勇边,死亡現(xiàn)場離奇詭異犹撒,居然都是意外死亡,警方通過查閱死者的電腦和手機粒褒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門识颊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奕坟,你說我怎么就攤上這事祥款。” “怎么了月杉?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵刃跛,是天一觀的道長。 經(jīng)常有香客問我苛萎,道長桨昙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任首懈,我火速辦了婚禮绊率,結(jié)果婚禮上谨敛,老公的妹妹穿的比我還像新娘究履。我一直安慰自己,他們只是感情好脸狸,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布最仑。 她就那樣靜靜地躺著,像睡著了一般炊甲。 火紅的嫁衣襯著肌膚如雪泥彤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天卿啡,我揣著相機與錄音吟吝,去河邊找鬼。 笑死颈娜,一個胖子當著我的面吹牛剑逃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播官辽,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛹磺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了同仆?” 一聲冷哼從身側(cè)響起萤捆,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俗或,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體市怎,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年辛慰,在試婚紗的時候發(fā)現(xiàn)自己被綠了焰轻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡昆雀,死狀恐怖辱志,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狞膘,我是刑警寧澤揩懒,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站挽封,受9級特大地震影響已球,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辅愿,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一智亮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧点待,春花似錦阔蛉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苗踪,卻和暖如春颠区,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背通铲。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工毕莱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颅夺。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓朋截,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碗啄。 傳聞我的和親對象是個殘疾皇子质和,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

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

  • 一、前提 最近有點懶散稚字,沒什么比較有深度的產(chǎn)出饲宿。剛好想重新研讀一下JUC線程池的源碼實現(xiàn)厦酬,在此之前先深入了解一下J...
    Java_蘇先生閱讀 1,505評論 1 10
  • JAVA線程生命周期 摘要 本文詳細總結(jié)了java線程的五種基本狀態(tài),和狀態(tài)之間的轉(zhuǎn)換關(guān)系瘫想;介紹了常見了創(chuàng)建線程的...
    yanzhelee閱讀 5,725評論 0 9
  • 一仗阅、基礎(chǔ)概念: 進程:幾乎任何的操作系統(tǒng)都支持運行多個任務(wù),通常一個任務(wù)就是一個程序国夜,而一個程序就是一個進程减噪。當一...
    小李子閱讀 762評論 0 1
  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的,后來想想還是整...
    coder_pig閱讀 1,655評論 2 17
  • 本文出自 Eddy Wiki 车吹,轉(zhuǎn)載請注明出處:http://eddy.wiki/interview-java.h...
    eddy_wiki閱讀 2,146評論 0 14