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