資源描述:
《java線程面試題top50-java開(kāi)發(fā)java經(jīng)驗(yàn)技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、Java線程面試題Top50-編程開(kāi)發(fā)技術(shù)Java線程面試題Top50木文由ImportNew?李廣翻譯自javarevisitedo歡迎加入翻譯小組。轉(zhuǎn)載請(qǐng)見(jiàn)文末要求。不管你是新程序員還是老手,你一定在面試中遇到過(guò)冇關(guān)線程的問(wèn)題。Java語(yǔ)言一個(gè)重要的特點(diǎn)就是內(nèi)置了對(duì)并發(fā)的支持,讓Java大受企業(yè)和程序員的歡迎。大多數(shù)待遇豐厚的Java開(kāi)發(fā)職位都要求開(kāi)發(fā)者精通多線程技術(shù)并月.冇豐富的Java程序開(kāi)發(fā)、調(diào)試、優(yōu)化經(jīng)驗(yàn),所以線程相關(guān)的問(wèn)題在面試中經(jīng)常會(huì)被提到。在典型的Java面試中,面試官會(huì)從線程的基本概念問(wèn)起,如:為什么你需耍使用線程,如何創(chuàng)
2、建線程,用什么方式創(chuàng)建線程比較好(比如:繼承thread類還是調(diào)用Runnable接口),然后逐漸問(wèn)到并發(fā)問(wèn)題像在Java并發(fā)編程的過(guò)程屮遇到了什么挑戰(zhàn),Java內(nèi)存模型,JDK1.5引入了哪些更高階的并發(fā)工具,并發(fā)編程常用的設(shè)計(jì)模式,經(jīng)典多線程問(wèn)題如生產(chǎn)者消費(fèi)者,哲學(xué)家就餐,讀寫(xiě)器或者簡(jiǎn)單的有界緩沖區(qū)問(wèn)題。僅僅知道線程的基木概念是遠(yuǎn)遠(yuǎn)不夠的,你必須知道如何處理死鎖,競(jìng)態(tài)條件,內(nèi)存沖突和線程安全等并發(fā)問(wèn)題。掌握了這些技巧,你就可以輕松應(yīng)對(duì)多線程和并發(fā)面試了。許多Java程序員在而試前才會(huì)去看而試題,這很正常。因?yàn)槭占囶}和練習(xí)很花時(shí)間,所以
3、我從許多面試者那里收集了Java多線程和并發(fā)相關(guān)的50個(gè)熱門問(wèn)題。我只收集了比較新的面試題H沒(méi)有提供全部答案。想必聰明的你對(duì)這些問(wèn)題早就心中冇數(shù)了,如果遇到不懂的問(wèn)題,你可以用Google找到答案。若你實(shí)在找不到答案,可以在文章的評(píng)論中向我求助。你也可以在這找到一些答案Java線程問(wèn)答Top12o50道Java線程面試題下面是Java線程相關(guān)的熱門面試題,你可以用它來(lái)好好準(zhǔn)備面試。1)什么是線程?線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位,它被包含在進(jìn)程Z屮,是進(jìn)程屮的實(shí)際運(yùn)作單位。程序員可以通過(guò)它進(jìn)行多處理器編程,你可以使用多線程對(duì)運(yùn)算密集型
4、任務(wù)提速。比如,如果一個(gè)線程完成一個(gè)任務(wù)要100毫秒,那么用十個(gè)線程完成改任務(wù)只需10毫秒。Java在語(yǔ)言層面對(duì)多線程提供了卓越的支持,它也是一個(gè)很好的賣點(diǎn)。欲了解更多詳細(xì)信息請(qǐng)點(diǎn)擊這里。2)線程和進(jìn)程有什么區(qū)別?線程是進(jìn)程的子集,一個(gè)進(jìn)程可以有很多線程,毎條線程并行執(zhí)行不同的任務(wù)。不同的進(jìn)程使用不同的內(nèi)存空間,而所有的線程共享一片相同的內(nèi)存空間。別把它和棧內(nèi)存搞混,每個(gè)線程都擁冇單獨(dú)的棧內(nèi)存用來(lái)存儲(chǔ)本地?cái)?shù)據(jù)。更多詳細(xì)信息請(qǐng)點(diǎn)擊這里。3)如何在Java中實(shí)現(xiàn)線程?在語(yǔ)言層面冇兩種方式。java.lang.Thread類的實(shí)例就是一個(gè)線程但是它
5、需要調(diào)用java.lang.Runnable接II來(lái)執(zhí)彳亍,由丁?線程類木身就是調(diào)用的Runnable接口所以你可以繼承java.lang.Thread類或者直接調(diào)用Runnable接口來(lái)重寫(xiě)run()方法實(shí)現(xiàn)線程。更多詳細(xì)信息請(qǐng)點(diǎn)擊這里.4)用Runnable還是Thread?這個(gè)問(wèn)題是上題的后續(xù),大家都知道我們可以通過(guò)繼承Thread類或者調(diào)用Runnable接口來(lái)實(shí)現(xiàn)線程,問(wèn)題是,那個(gè)方法更好呢?什么情況下使用它?這個(gè)問(wèn)題很容易回答,如果你知道匕腹不支持類的多重繼承,但允許你調(diào)用多個(gè)接口。所以如果你要繼承其他類,當(dāng)然是調(diào)用Runnabl
6、e接口好了。更多詳細(xì)信息請(qǐng)點(diǎn)擊這里。6)Thread類中的start()和run()方法有什么區(qū)別?這個(gè)問(wèn)題經(jīng)常被問(wèn)到,但還是能從此區(qū)分出面試者對(duì)Java線程模型的理解程度。start()方法被用來(lái)啟動(dòng)新創(chuàng)建的線程,而.ftstart()內(nèi)部調(diào)用了run()方法,這和直接調(diào)用run()方法的效果不一樣。當(dāng)你調(diào)用rim()方法的時(shí)候,只會(huì)是在原來(lái)的線程屮調(diào)用,沒(méi)有新的線程啟動(dòng),start()方法才會(huì)啟動(dòng)新線程。更多討論請(qǐng)點(diǎn)擊這里7)Java中Runnable和Callable有什么不同?Runnable和Callable都代表那些耍在不同的線程
7、屮執(zhí)行的任務(wù)。Runnable從JDK1.0開(kāi)始就有了,Callable是在JDK1.5增加的。它們的主要區(qū)別是Callable的call()方法可以返冋值和拋出異常,而Runnable的run()方法沒(méi)有這些功能。Callable可以返回裝載冇計(jì)算結(jié)果的Future對(duì)象。我的博客冇更詳細(xì)的說(shuō)明。8)Java中CyclicBarrier和CountDownLatch有什么不同?CyclicBarrier和CountDownLatch都可以用來(lái)讓一組線程等待-其它線程。與CyclicBarrier不同的是,CountdownLatch不能重新使
8、用。點(diǎn)此查看更多信息和示例代碼。9)Java內(nèi)存模型是什么?Java內(nèi)存模型規(guī)定和指引Jewel程序在不同的內(nèi)存架構(gòu)、CPU和操作系統(tǒng)間有確定性地行為。它在多線程的