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


多線程和並發的問題是任何java面試中必不可少的一部分。

 

1)現在有三個線程:T1、T2和T3。如何確保T2在T1完成后執行,T3在T2完成后執行?

這個線程問題通常在第一階段或電話面試階段詢問,以確定您是否熟悉“連接”方法。此多線程問題比較簡單,可以在聯接方法中實現。

 

2)在java鎖接口優勢比同步塊是什么?您需要實現一個高效的高速緩存,允許多個用戶讀取,但只允許一個用戶寫入,以保持其完整性。你是如何實現的?

在多線程和並發編程鎖接口最大的優勢是,他們對閱讀和寫作分別提供鎖,可以滿足高性能的數據結構和條件阻止你寫像ConcurrentHashMap。java線程的面試問題越來越基於面試官的答案變得。我強烈建議您在進行多線程訪問之前仔細閱讀鎖,因為現在它被廣泛用於為電子事務構建客戶端緩存和事務連接空間。

 

3)在java的等待和睡眠的方法之間的區別嗎?

java線程的面試往往是在電話采訪中問。最大的區別是,當等待等待時,鎖被釋放,睡眠鎖住了鎖。等待通常用於線程間交互,而休眠通常用於暫停執行。

 

4)阻塞隊列是用java實現的。

這是一個比較困難的多線程面試問題,它可以達到很多的目標。首先,它可以檢測應試者是否可以與java線程編寫程序。其次,它可以檢測考生對並發場景的理解,並在此基礎上提出許多問題。如果他用等待()和通知()方法來實現阻塞隊列,你可以請他寫了最新的java 5並發。

 

5)編寫的代碼在java解決生產者消費者問題。

這與上面的問題很相似,但這是一個比較經典的問題,有時面試會問以下問題。有,當然,很多的解決方案如何解決java生產者消費者問題,我已經分享了一個阻塞隊列的方法。有時他們甚至問如何做哲學家的飯。

 

6)編程程序,用java可能導致死鎖,你將如何解決呢?

這是我最喜歡的java線程面試問題,因為即使是很常見的死鎖問題的時候寫的多線程的並發程序,很多考生不能寫無死鎖的代碼(無死鎖的代碼)。他們在掙扎。只要告訴他們你有N個資源和N個線程,你需要所有的資源來做一個操作。為了簡單地將n替換為2,數據越大會使問題看起來更復雜。關於死鎖的更多信息是通過避免在java死鎖了。

 

7)原子操作是什么,什么是java的原子操作?

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

 

8)在java中揮發性的關鍵的作用是什么?怎么用它?從同步方法在java的區別是什么?

由於java 5和java內存模式發生了改變,基於關鍵字volatile的線程問題越來越受關注。你應該准備回答如何能確保volatile變量的可見性,sequentility,在並行環境的一致性。

 

9)競爭的條件是什么?你如何找到並解決競爭?

這是在多線程面試的高級階段出現的問題。大多數面試官都在問你最近遇到的競爭環境,以及你如何解決這些問題。有時候他們會編寫簡單的代碼,然后讓你發現代碼的競爭條件。你可以參考我之前的文章對java的競爭條件。在我看來,這是一個最好的java線程面試問題。它可以檢測該候選人的經驗來解決競爭條件完全相同,或寫作,這是免費的數據種族或種族代碼,”“這是最好的書“java”並行的實踐。

 

10)如何使用線程轉儲?你將如何分析線程轉儲?

在UNIX中,您可以使用殺- 3,線程轉儲將打印日志,您可以在Windows中使用“Ctrl +中斷”。這是一個非常簡單和專業的線程面試問題,但如果他問你如何分析它,這將是棘手的。

 

11)為什么我們在調用開始()方法時執行run()方法,為什么我們不能直接調用run()方法呢?

這是一個非常經典的java多線程面試問題。這也是我剛開始編寫線程程序時的一個難題。現在這個問題通常是在電話面試或在第一中級java面試第一輪問。這個問題的答案應該是,當你調用開始()方法時,你將創建一個新的線程並在run()方法中執行代碼。但是,如果直接調用run()方法,它不會創建一個新線程,也不會執行調用線程的代碼。閱讀我之前寫過的關於啟動和運行方法之間的差異的文章,以便獲得更多信息。

 

12)你如何喚醒阻塞的線程在java?

這是線程和阻塞的一個棘手問題,它有很多解決方案。如果線程被IO阻塞了,我認為沒有辦法停止線程。如果線程通過調用等待阻塞(),睡眠(),或加入(),您可以中斷線程和投擲它喚醒InterruptedException。如何處理阻塞方法在java,我早些時候寫的,有很多關於處理阻塞的線程信息。

 

13)在java CycliBarriar和countdownlatch之間的區別是什么?

這個線程的問題主要是用來檢測你是否熟悉JDK5並發包。兩者的區別是,cyclicbarrier可以重用已經過去,countdownlatch不能重用的障礙。

 

14)什么是不可變對象,它對編寫並發應用程序有什么幫助?

另一個多線程的經典面試問題與線程無關,但它有很大幫助。這個java面試問題是非常棘手的,如果他要求你寫一個不可變的對象,或者問你為什么字符串是不可變的。

 

15)在多線程環境中遇到的常見問題是什么?你是怎么解決的?

經常遇到的多線程和內存接口,工藝復雜的競爭條件,死鎖,活鎖和飢餓。這個問題沒有盡頭。如果你犯了一個錯誤,很難找到和調試。這是最基礎的面試,不是java線程的問題,根據實際應用。

 

關注我們“java工會”,獲取更多技術干貨:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM