如果你正準(zhǔn)備參加Java開發(fā)崗位面試,那么你會遇到很多有關(guān)多線程的面試問題。為什么呢?因為多線程和并發(fā)問題已經(jīng)成為Java面試中必不可少的一部分。大多數(shù)企業(yè)在面試的時候都喜歡用棘手的Java線程面試題來考察面試者,他們希望確保面試者對Java多線程和并發(fā)有扎實的知識基礎(chǔ)。下面千鋒老師匯總企業(yè)在面試時常問的一些相關(guān)問題,希望今后大家對這些知識點有所準(zhǔn)備。
一、現(xiàn)在有線程 T1、T2 和 T3。你如何確保 T2 線程在 T1 之后執(zhí)行,并且 T3 線程在 T2 之后執(zhí)行?
有關(guān)線程面試題通常在第一輪面試或電話面試時會被問到,這道多線程問題為了測試面試者是否熟悉join方法的概念。答案也非常簡單:可以用Thread類的join 方法實現(xiàn)這一效果。
二、Java中新的Lock接口相對于同步代碼塊有什么優(yōu)勢?如果讓你實現(xiàn)一個高性能緩存,支持并發(fā)讀取和單一寫入,你如何保證數(shù)據(jù)完整性?
多線程和并發(fā)編程中使用lock接口的最大優(yōu)勢是它為讀和寫提供兩個單獨的鎖,可以讓你構(gòu)建高性能數(shù)據(jù)結(jié)構(gòu),比如Concurrent HashMap和條件阻塞。這道Java 線程面試題越來越多見,而且隨后的面試題都基于面試者對這道題的回答。 強烈建議在任何Java多線程面試前都要多看看有關(guān)鎖的知識。
三、Java中wait和sleep方法有什么區(qū)別?
兩者主要的區(qū)別就是等待釋放鎖和監(jiān)視器。sleep方法在等待時不會釋放任何鎖或監(jiān)視器。wait方法多用于線程間通信,而sleep只是在執(zhí)行時暫停。
四、如何在Java中實現(xiàn)一個阻塞隊列?
這道題目考察了面試者是否真正寫過Java多線程代碼,考察了面試者對并發(fā)場景的理解。并且可以根據(jù)面試者的代碼問很多后續(xù)問題,如果他用wait()和notify()方法成功實現(xiàn)了阻塞隊列,可以讓他用Java5的并發(fā)類重新實現(xiàn)一次。
五、如何在Java中編寫代碼解決生產(chǎn)者消費者問題?
這個問題在工作中很典型,但有時面試官會問這類問題,比如“在Java 中如何解決生產(chǎn)者消費者問題?”其實,有很多解決方式。其中Java中BlockingQueue即可解決。
六、在Java中如何解決死鎖?
死鎖在多線程并發(fā)編程中十分常見,只需要問他們?nèi)绻蠳個資源和N個線程去執(zhí)行某個操作,然后請求所有資源。
七、什么是原子操作?Java中有哪些原子操作?
這是個簡單的Java線程面試題。另一個緊隨其后的問題將是:你需要同步原子操作嗎?
以上是最常問的Java線程面試題,不僅有助于大家面試,掌握相關(guān)問題的答案后,還可為大家打開多線程概念的大門。