更新時(shí)間:2019-07-19 11:28:46 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3525次
多線程并發(fā)編程是Java編程中重要的一塊內(nèi)容,也是面試重點(diǎn)覆蓋區(qū)域。所以,學(xué)好多線程并發(fā)編程對(duì)Java程序員來(lái)說(shuō)極其重要的。下面動(dòng)力節(jié)點(diǎn)java學(xué)院小編整理了60道最常見(jiàn)的Java多線程面試題及答案,供你學(xué)習(xí)或者面試參考。
1.多線程使用的優(yōu)缺點(diǎn)?
優(yōu)點(diǎn):
(1)多線程技術(shù)使程序的響應(yīng)速度更快
(2)當(dāng)前沒(méi)有進(jìn)行處理的任務(wù)可以將處理器時(shí)間讓給其它任務(wù)
(3)占用大量處理時(shí)間的任務(wù)可以定期將處理器時(shí)間讓給其它任務(wù)
(4)可以隨時(shí)停止任務(wù)
(5)可以分別設(shè)置各個(gè)任務(wù)的優(yōu)先級(jí)以及優(yōu)化性能
缺點(diǎn):
(1)等候使用共享資源時(shí)造成程序的運(yùn)行速度變慢
(2)對(duì)線程進(jìn)行管理要求額外的cpu開(kāi)銷
(3)可能出現(xiàn)線程死鎖情況。即較長(zhǎng)時(shí)間的等待或資源競(jìng)爭(zhēng)以及死鎖等癥狀。
1.start()方法和run()方法簡(jiǎn)介和區(qū)別?
start()方法:
1)用start方法來(lái)啟動(dòng)線程,真正實(shí)現(xiàn)了多線程運(yùn)行,這時(shí)無(wú)需等待run方法體代碼執(zhí)行完畢而直接繼續(xù)執(zhí)行下面的代碼。
2)通過(guò)調(diào)用Thread類的start()方法來(lái)啟動(dòng)一個(gè)線程,這時(shí)此線程處于就緒(可運(yùn)行)狀態(tài),并沒(méi)有運(yùn)行,一旦得到CPU時(shí)間片,就開(kāi)始執(zhí)行run()方法。
run()方法:
1)run()方法只是類的一個(gè)普通方法而已,如果直接調(diào)用Run方法,程序中依然只有主線程這一個(gè)線程,其程序執(zhí)行路徑還是只有一條。
總結(jié):
1)調(diào)用start方法方可啟動(dòng)線程,
2)而run方法只是thread的一個(gè)普通方法調(diào)用,還是在主線程里執(zhí)行。
3)把需要并行處理的代碼放在run()方法中,start()方法啟動(dòng)線程將自動(dòng)調(diào)用run()方法,這是由jvm的內(nèi)存機(jī)制規(guī)定的。
4)并且run()方法必須是public訪問(wèn)權(quán)限,返回值類型為void。
2.Runnable接口和Callable接口的相同點(diǎn)和不同點(diǎn)?
Lock和synchronized對(duì)比?
1)Lock是一個(gè)接口,而synchronized是Java中的關(guān)鍵字,synchronized是內(nèi)置的語(yǔ)言實(shí)現(xiàn);
2)synchronized在發(fā)生異常時(shí),會(huì)自動(dòng)釋放線程占有的鎖,因此不會(huì)導(dǎo)致死鎖現(xiàn)象發(fā)生;而Lock在發(fā)生異常時(shí),如果沒(méi)有主動(dòng)通過(guò)unLock()去釋放鎖,則很可能造成死鎖現(xiàn)象,因此使用Lock時(shí)需要在finally塊中釋放鎖;
3)Lock可以讓等待鎖的線程響應(yīng)中斷,而synchronized卻不行,使用synchronized時(shí),等待的線程會(huì)一直等待下去,不能夠響應(yīng)中斷;
4)通過(guò)Lock可以知道有沒(méi)有成功獲取鎖,而synchronized卻無(wú)法辦到。
5)Lock可以提高多個(gè)線程進(jìn)行讀操作的效率。
6)在JDK1.5中,synchronized是性能低效的。因?yàn)檫@是一個(gè)重量級(jí)操作,它對(duì)性能最大的影響是阻塞式的實(shí)現(xiàn),掛起線程和恢復(fù)線程的操作都需要轉(zhuǎn)入內(nèi)核態(tài)中完成,這些操作給系統(tǒng)的并發(fā)性帶來(lái)了很大的壓力。相比之下使用Java提供的Lock對(duì)象,性能更高一些。
但是,JDK1.6,發(fā)生了變化,對(duì)synchronize加入了很多優(yōu)化措施,有自適應(yīng)自旋,鎖消除,鎖粗化,輕量級(jí)鎖,偏向鎖等等。導(dǎo)致在JDK1.6上synchronize的性能并不比Lock差。因此。提倡優(yōu)先考慮使用synchronized來(lái)進(jìn)行同步。
更多java面試題請(qǐng)關(guān)注動(dòng)力節(jié)點(diǎn)java學(xué)院官網(wǎng)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743