更新時間:2019-09-12 11:36:25 來源:動力節點 瀏覽2608次
編程語言Java的應用非常廣,在網頁、手機系統、軟件、游戲中都可以找到它的身影,崗位需求越來越大。
在Java面試中,99%以上會遇到與多線程相關的問題,大多數待遇豐厚的Java開發職位對于程序員的要求更是要精通多線程技術。
今天,小編分享了騰訊等大公司常考的Java多線程面試題。
0、進程,線程,協程之間的區別是什么(這個問題考的是基礎概念,這個一定不要失誤)
回答:
簡單來說,進程是程序運行和資源分配的基本單位,一個程序至少有一個進程,而一個進程至少有一個線程。進程在執行過程中擁有獨立的內存單元,而多個線程共享內存資源,這樣可以減少切換次數,從而效率更高。
線程是進程的一個實體,是cpu調度和分派的基本單位,是比程序更小的能獨立運行的基本單位。同一進程中的多個線程之間可以并發執行。
1、守護線程和非守護線程有怎么區別
回答:
程序運行完畢,jvm會等待非守護線程完成后關閉,但是jvm不會等待守護線程。守護線程最典型的例子就是GC線程。
2、多線程上下文切換是什么?
回答:
多線程上下文切換就是指CPU控制權由一個已經正在運行的線程切換到另外一個就緒并等待獲取CPU執行權的線程的過程。
3、有哪兩種創建線程的方式?
回答:
兩種方式:通過實現java.lang.Runnable或者通過擴展java.lang.Thread類。
這里要注意,面試官還可能問你這兩種方式更優的是哪個?可以這樣答:
實現Runnable接口可能更優,原因:a、Java不支持多繼承,因此擴展Thread類就代表這個子類不能擴展其他類。而實現Runnable接口的類還可能擴展另一個類;b、類可能只要求可執行即可,因此繼承整個Thread類的開銷過大。
4、怎么檢測一個線程是否持有對象監視器
Java的Thread類提供了一個holdsLock(Objectobj)方法,只有當對象obj的監視器被某線程持有時才會返回true。
5、產生死鎖的條件有哪些?
回答:
互斥條件:一個資源只能夠被一個進程使用。
請求與保持條件:請求資源是如果一個進程阻塞,則對已獲得的資源保持不放。
不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。
6、一個線程如果出現了運行時異常怎么辦?
回答:
如果該異常沒有被捕獲的話,這個線程就停止執行了。但是要注意:如果這個線程持有某個對象的監視器,則這個對象監視器會被立即釋放。
7、Java使用的線程調度算法是?
回答:
應用了搶占式,Java中一個線程用完CPU之后,操作系統會立馬根據線程優先級、線程的饑餓情況等數據算出一個總的優先級并分配下一個時間片給某個線程執行。
雖然在Java面試過程中被問到與多線程相關的問題的幾率極高,但是完成一場Java面試一定還需要別的知識儲備。更多java面試題,關注動力節點IT培訓官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習