Java中的多執行緒程式設計---面試
- 什麼是多執行緒
關鍵考點: a) 執行緒的概念。 b) 多執行緒的概念。 c) 多執行緒併發的含義。
答案: 執行緒是程序中的一個執行單元,又稱為輕量級程序,它和程序一樣擁有獨立的執行控制,由作業系統負責排程。 而多執行緒是這樣的一種機制:它允許在程式中併發執行多個指令流,每個指令流都稱為一個執行緒。多執行緒進位制下的執行緒彼此之間互相獨立,比較容易共享資料,通過併發執行的方式提高程式的效率和效能。
- 解釋程序和執行緒的區別
關鍵靠點: a) 程序的概念 b) 執行緒的概念。 c) 程序和執行緒的區別。
答案: 程序和執行緒之間的區別主要包括:
- 執行緒的劃分尺度小於程序,執行緒隸屬於某個執行緒。
- 程序是程式的一種動態形式,是CPU、記憶體等資源佔用的基本單位,而執行緒是不能獨立的佔有這些資源的。
- 程序之間相互獨立,通訊比較困難,而執行緒之間共享一塊記憶體區域,通訊比較方便。
- 程序在執行過程中,包含比較固定的入口、執行順序和出口,而執行緒的這些過程會被應用程式所控制。
- 如何讓一個類稱為執行緒類
關鍵考點: a) Runnable介面。 b) Thread類。
答案: 讓一個類成為執行緒類的方式有兩種,一個是實現Runnable介面,另一個就是繼承Thread類。
- 解釋Runnable介面與Thread類的區別
關鍵考點: a) Runnable介面 b) Thread類。 c) 介面與類的區別。
答案: Runnable介面與Thread類的區別主要包括以下幾個方面:
- 執行緒類繼承Thread則不能繼承其他類,而Runnable介面可以。
- 執行緒類繼承Thread相對於Runnable來說,使用執行緒的方法更方便一些。
- 實現Runnable介面的執行緒類的多個執行緒,可以更方便的訪問同一變數,而Thread類則需要內部類來進行替代。
- 如何啟動一個執行緒
關鍵考點: a) Thread類的start()方法。
答案: 繼承Thread類的執行緒類,可以通過new關鍵建立一個執行緒物件以後,執行start()方法開始一個執行緒。而實現了Runnable介面的執行緒類,需要用它的物件例項,作為Thread類構造方法的引數,建立一個Thread物件,然後呼叫start()方法開始一個執行緒。
- 如何用sychronized來讓執行緒同步。
關鍵考點:
- 執行緒安全的構成原因。
- Sychronized的使用方法。
答案: Sychronized關鍵字代表要為某一段程式碼加上一個同步鎖,這樣的鎖是繫結在某一個物件上邊的。如果是同步程式碼塊,需要為該sychronized關鍵字提供一個物件的引用。如果是同步方法,只需要加一個sychronized關鍵字的修飾。 Synchronized為某段程式碼加上鎖以後,某個執行緒進入該段程式碼之前,首先需要檢查該鎖是否被佔用,如果沒有被佔用則繼續執行,如果已經被佔用,則需要等到該鎖被釋放以後才能繼續執行。其中,執行緒執行完該段程式碼就是釋放鎖的標誌。
- 編寫一個生產者與消費者模型的多執行緒例子程式
關鍵考點:
- 執行緒狀態的轉變過程。
- Wait()和notify()的使用方法。
答案: 後續加上……
- 如何使用Java的執行緒池
關鍵考點: 執行緒池的概念。 Java關於執行緒池的API使用方法。
答案: Java提供了java.util.concurrent.ThreadPoolExecutor類來使用執行緒池,通過它構造的物件,可以很容易地管理執行緒,並把執行緒程式碼與業務程式碼進行分離。