Java面試多線程幾個基礎的知識點

不管你是新程序員還是老手,你一定在面試中遇到過有關線程的問題。Java語言一個重要的特點就是內置了對併發的支持,讓Java大受企業和程序員的歡迎。大多數待遇豐厚的Java開發職位都要求開發者精通多線程技術並且有豐富的Java程序開發、調試、優化經驗,所以線程相關的問題在面試中經常會被提到。

在典型的Java面試中, 面試官會從線程的基本概念問起, 如:為什麼你需要使用線程, 如何創建線程,用什麼方式創建線程比較好(比如:繼承thread類還是調用Runnable接口),然後逐漸問到併發問題像在Java併發編程的過程中遇到了什麼挑戰,Java內存模型,JDK1.5引入了哪些更高階的併發工具,併發編程常用的設計模式,經典多線程問題如生產者消費者,哲學家就餐,讀寫器或者簡單的有界緩衝區問題。僅僅知道線程的基本概念是遠遠不夠的, 你必須知道如何處理死鎖,競態條件,內存衝突和線程安全等併發問題。掌握了這些技巧,你就可以輕鬆應對多線程和併發面試了。

1) 什麼是線程?

線程是操作系統能夠進行運算調度的最小單位,它被包含在進程之中,是進程中的實際運作單位。程序員可以通過它進行多處理器編程,你可以使用多線程對運算密集型任務提速。比如,如果一個線程完成一個任務要100毫秒,那麼用十個線程完成改任務只需10毫秒。Java在語言層面對多線程提供了卓越的支持,它也是一個很好的賣點。

2) 線程和進程有什麼區別?

線程是進程的子集,一個進程可以有很多線程,每條線程並行執行不同的任務。不同的進程使用不同的內存空間,而所有的線程共享一片相同的內存空間。別把它和棧內存搞混,每個線程都擁有單獨的棧內存用來存儲本地數據。

3) 如何在Java中實現線程?

1)java.lang.Thread 類的實例就是一個線程但是它需要調用java.lang.Runnable接口來執行,

2)由於線程類本身就是調用的Runnable接口所以你可以繼承java.lang.Thread 類或者直接調用Runnable接口來重寫run()方法實現線程。

3)實現Callable接口通過FutureTask包裝器來創建Thread線程。

4).Thread 類中的start() 和 run() 方法有什麼區別

1.start()方法來啟動線程,真正實現了多線程運行。這時無需等待run方法體代碼執行完畢,可以直接繼續執行下面的代碼;通過調用Thread類的start()方法來啟動一個線程, 這時此線程是處於就緒狀態, 並沒有運行。 然後通過此Thread類調用方法run()來完成其運行操作的, 這裡方法run()稱為線程體,它包含了要執行的這個線程的內容, Run方法運行結束, 此線程終止。然後CPU再調度其它線程。

2.run()方法當作普通方法的方式調用。程序還是要順序執行,要等待run方法體執行完畢後,才可繼續執行下面的代碼; 程序中只有主線程——這一個線程, 其程序執行路徑還是隻有一條, 這樣就沒有達到寫線程的目的。

記住:多線程就是分時利用CPU,宏觀上讓所有線程一起執行 ,也叫併發.

Java面試多線程幾個基礎的知識點


分享到:


相關文章: