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