15個頂級Java多線程面試題及答案

在任何Java面試當(dāng)中多線程和并發(fā)方面的問題都是必不可少的一部分。如果你想獲得任何股票投資銀行的前臺資訊職位批什,那么你應(yīng)該準備很多關(guān)于多線程的問題农曲。在投資銀行業(yè)務(wù)中多線程和并發(fā)是一個非常受歡迎的話題,特別是電子交易發(fā)展方面相關(guān)的驻债。他們會問面試者很多令人混淆的Java線程問題乳规。面試官只是想確信面試者有足夠的Java線程與并發(fā)方面的知識,因為候選人中有很多只浮于表面合呐。

1. 現(xiàn)在有T1驯妄、T2、T3三個線程合砂,你怎樣保證T2在T1執(zhí)行完后執(zhí)行青扔,T3在T2執(zhí)行完后執(zhí)行源织?

這個線程問題通常會在第一輪或電話面試階段被問到,目的是檢測你對”join”方法是否熟悉微猖。這個多線程問題比較簡單谈息,可以用join方法實現(xiàn)。

2. 在Java中Lock接口比synchronized塊的優(yōu)勢是什么凛剥?你需要實現(xiàn)一個高效的緩存侠仇,它允許多個用戶讀,但只允許一個用戶寫犁珠,以此來保持它的完整性逻炊,你會怎樣去實現(xiàn)它?

lock接口在多線程和并發(fā)編程中最大的優(yōu)勢是它們?yōu)樽x和寫分別提供了鎖犁享,它能滿足你寫像ConcurrentHashMap這樣的高性能數(shù)據(jù)結(jié)構(gòu)和有條件的阻塞余素。Java線程面試的問題越來越會根據(jù)面試者的回答來提問。我強烈建議在你去參加多線程的面試之前認真讀一下Locks炊昆,因為當(dāng)前其大量用于構(gòu)建電子交易終統(tǒng)的客戶端緩存和交易連接空間桨吊。

3. 在java中wait和sleep方法的不同?

通常會在電話面試中經(jīng)常被問到的Java線程面試問題凤巨。最大的不同是在等待時wait會釋放鎖视乐,而sleep一直持有鎖。Wait通常被用于線程間交互敢茁,sleep通常被用于暫停執(zhí)行佑淀。

4. 用Java實現(xiàn)阻塞隊列。

這是一個相對艱難的多線程面試問題彰檬,它能達到很多的目的伸刃。第一,它可以檢測侯選者是否能實際的用Java線程寫程序僧叉;第二奕枝,可以檢測侯選者對并發(fā)場景的理解棺榔,并且你可以根據(jù)這個問很多問題瓶堕。如果他用wait()和notify()方法來實現(xiàn)阻塞隊列,你可以要求他用最新的Java 5中的并發(fā)類來再寫一次症歇。

5. 用Java寫代碼來解決生產(chǎn)者——消費者問題郎笆。

與上面的問題很類似,但這個問題更經(jīng)典忘晤,有些時候面試都會問下面的問題宛蚓。在Java中怎么解決生產(chǎn)者——消費者問題,當(dāng)然有很多解決方法设塔,我已經(jīng)分享了一種用阻塞隊列實現(xiàn)的方法凄吏。有些時候他們甚至?xí)栐趺磳崿F(xiàn)哲學(xué)家進餐問題。

6. 用Java編程一個會導(dǎo)致死鎖的程序,你將怎么解決痕钢?

這是我最喜歡的Java線程面試問題图柏,因為即使死鎖問題在寫多線程并發(fā)程序時非常普遍,但是很多侯選者并不能寫deadlock free code(無死鎖代碼任连?)蚤吹,他們很掙扎。只要告訴他們随抠,你有N個資源和N個線程裁着,并且你需要所有的資源來完成一個操作。為了簡單這里的n可以替換為2拱她,越大的數(shù)據(jù)會使問題看起來更復(fù)雜二驰。通過避免Java中的死鎖來得到關(guān)于死鎖的更多信息。

7. 什么是原子操作椭懊,Java中的原子操作是什么诸蚕?

非常簡單的java線程面試問題,接下來的問題是你需要同步一個原子操作氧猬。

8.?Java中的Volatile關(guān)鍵是什么作用背犯?怎樣使用它?在Java中它跟synchronized方法有什么不同盅抚?

自從Java 5和Java內(nèi)存模型改變以后漠魏,基于volatile關(guān)鍵字的線程問題越來越流行。應(yīng)該準備好回答關(guān)于volatile變量怎樣在并發(fā)環(huán)境中確蓖可見性柱锹、順序性和一致性。

9. 什么是競爭條件丰包?你怎樣發(fā)現(xiàn)和解決競爭禁熏?

這是一道出現(xiàn)在多線程面試的高級階段的問題。大多數(shù)的面試官會問最近你遇到的競爭條件邑彪,以及你是怎么解決的瞧毙。有些時間他們會寫簡單的代碼,然后讓你檢測出代碼的競爭條件寄症≈姹耄可以參考我之前發(fā)布的關(guān)于Java競爭條件的文章。在我看來這是最好的java線程面試問題之一有巧,它可以確切的檢測候選者解決競爭條件的經(jīng)驗释漆,or?writing code which is free of data race or any other?race condition。關(guān)于這方面最好的書是《Concurrency practices in Java》篮迎。

10. 你將如何使用thread dump男图?你將如何分析Thread dump示姿?

在UNIX中你可以使用kill -3,然后thread dump將會打印日志逊笆,在windows中你可以使用”CTRL+Break”峻凫。非常簡單和專業(yè)的線程面試問題,但是如果他問你怎樣分析它览露,就會很棘手荧琼。

11. 為什么我們調(diào)用start()方法時會執(zhí)行run()方法,為什么我們不能直接調(diào)用run()方法差牛?

這是另一個非常經(jīng)典的java多線程面試問題命锄。這也是我剛開始寫線程程序時候的困惑。現(xiàn)在這個問題通常在電話面試或者是在初中級Java面試的第一輪被問到偏化。這個問題的回答應(yīng)該是這樣的脐恩,當(dāng)你調(diào)用start()方法時你將創(chuàng)建新的線程,并且執(zhí)行在run()方法里的代碼侦讨。但是如果你直接調(diào)用run()方法驶冒,它不會創(chuàng)建新的線程也不會執(zhí)行調(diào)用線程的代碼。閱讀我之前寫的《start與run方法的區(qū)別》這篇文章來獲得更多信息韵卤。

12. Java中你怎樣喚醒一個阻塞的線程骗污?

這是個關(guān)于線程和阻塞的棘手的問題,它有很多解決方法沈条。如果線程遇到了IO阻塞需忿,我并且不認為有一種方法可以中止線程。如果線程因為調(diào)用wait()蜡歹、sleep()屋厘、或者join()方法而導(dǎo)致的阻塞,你可以中斷線程月而,并且通過拋出InterruptedException來喚醒它汗洒。我之前寫的《How to deal with blocking methods in java》有很多關(guān)于處理線程阻塞的信息。

13. 在Java中CycliBarriar和CountdownLatch有什么區(qū)別父款?

這個線程問題主要用來檢測你是否熟悉JDK5中的并發(fā)包溢谤。這兩個的區(qū)別是CyclicBarrier可以重復(fù)使用已經(jīng)通過的障礙,而CountdownLatch不能重復(fù)使用铛漓。

14. 什么是不可變對象溯香,它對寫并發(fā)應(yīng)用有什么幫助鲫构?

另一個多線程經(jīng)典面試問題浓恶,并不直接跟線程有關(guān),但間接幫助很多结笨。這個java面試問題可以變的非常棘手包晰,如果他要求你寫一個不可變對象湿镀,或者問你為什么String是不可變的。

15. 你在多線程環(huán)境中遇到的共同的問題是什么伐憾?你是怎么解決它的勉痴?

多線程和并發(fā)程序中常遇到的有Memory-interface、競爭條件树肃、死鎖蒸矛、活鎖和饑餓。問題是沒有止境的胸嘴,如果你弄錯了雏掠,將很難發(fā)現(xiàn)和調(diào)試。這是大多數(shù)基于面試的劣像,而不是基于實際應(yīng)用的Java線程問題乡话。

補充的其它幾個問題:

1)在java中綠色線程和本地線程區(qū)別?

2)線程與進程的區(qū)別耳奕?

3)什么是多線程中的上下文切換绑青?

4)死鎖與活鎖的區(qū)別,死鎖與餡餅的區(qū)別屋群?

5)Java中用到的線程調(diào)度算法是什么闸婴?

6)在Java中什么是線程調(diào)度?

7)在線程中你怎么處理不可捕捉異常芍躏?

8)什么是線程組掠拳,為什么在Java中不推薦使用?

9)為什么使用Executor框架比使用應(yīng)用創(chuàng)建和管理線程好纸肉?

10)在Java中Executor和Executors的區(qū)別溺欧?

11)如何在Windows和Linux上查找哪個線程使用的CPU時間最長?

在此我向大家推薦一個架構(gòu)學(xué)習(xí)交流群柏肪。交流學(xué)習(xí)群號:478030634 里面會分享一些資深架構(gòu)師錄制的視頻錄像:有Spring姐刁,MyBatis,Netty源碼分析烦味,高并發(fā)聂使、高性能、分布式谬俄、微服務(wù)架構(gòu)的原理柏靶,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識體系溃论。還能領(lǐng)取免費的學(xué)習(xí)資源屎蜓,目前受益良多

注:關(guān)注作者微信公眾號,了解更多分布式架構(gòu)钥勋、微服務(wù)炬转、netty辆苔、MySQL、spring扼劈、性能優(yōu)化驻啤、等知識點。公眾號:《Java爛豬皮》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荐吵,一起剝皮案震驚了整個濱河市骑冗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌先煎,老刑警劉巖沐旨,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異榨婆,居然都是意外死亡磁携,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門良风,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谊迄,“玉大人,你說我怎么就攤上這事烟央⊥撑担” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵疑俭,是天一觀的道長粮呢。 經(jīng)常有香客問我,道長钞艇,這世上最難降的妖魔是什么啄寡? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任拦止,我火速辦了婚禮俭茧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纺棺。我一直安慰自己飘弧,他們只是感情好识藤,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著次伶,像睡著了一般痴昧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冠王,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天赶撰,我揣著相機與錄音,去河邊找鬼。 笑死扣囊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绒疗。 我是一名探鬼主播侵歇,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吓蘑!你這毒婦竟也來了惕虑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤磨镶,失蹤者是張志新(化名)和其女友劉穎溃蔫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琳猫,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡伟叛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脐嫂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片统刮。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖账千,靈堂內(nèi)的尸體忽然破棺而出侥蒙,到底是詐尸還是另有隱情,我是刑警寧澤匀奏,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布鞭衩,位于F島的核電站,受9級特大地震影響娃善,放射性物質(zhì)發(fā)生泄漏论衍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一聚磺、第九天 我趴在偏房一處隱蔽的房頂上張望饲齐。 院中可真熱鬧,春花似錦咧最、人聲如沸捂人。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滥搭。三九已至,卻和暖如春捣鲸,著一層夾襖步出監(jiān)牢的瞬間瑟匆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工栽惶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留愁溜,地道東北人疾嗅。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像冕象,于是被迫代替她去往敵國和親代承。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

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