當前位置:才華都>教師之家>試題>

Java執行緒面試題

試題 閱讀(2.34W)

引導語:執行緒並不是新的概念,是許多作業系統,以下是小編整理的Java執行緒面試題,歡迎參考閱讀!

1) 什麼是執行緒?

執行緒是作業系統能夠進行運算排程的最小單位,它被包含在程序之中,是程序中的實際運作單位。程式設計師可以通過它進行多處理器程式設計,你可以使用多執行緒對運算密集型任務提速。比如,如果一個執行緒完成一個任務要100毫秒,那麼用十個執行緒完成改任務只需10毫秒。Java在語言層面對多執行緒提供了卓越的支援,它也是一個很好的賣點。欲瞭解更多詳細資訊請點選這裡。

2) 執行緒和程序有什麼區別?

執行緒是程序的子集,一個程序可以有很多執行緒,每條執行緒並行執行不同的任務。不同的程序使用不同的記憶體空間,而所有的執行緒共享一片相同的記憶體空間。別把它和棧記憶體搞混,每個執行緒都擁有單獨的棧記憶體用來儲存本地資料。更多詳細資訊請點選這裡。

3) 如何在Java中實現執行緒?

在語言層面有兩種方式。ad 類的例項就是一個執行緒但是它需要呼叫able介面來執行,由於執行緒類本身就是呼叫的Runnable介面所以你可以繼承ad 類或者直接呼叫Runnable介面來重寫run()方法實現執行緒。更多詳細資訊請點選這裡.

Java執行緒面試題

4) 用Runnable還是Thread?

這個問題是上題的後續,大家都知道我們可以通過繼承Thread類或者呼叫Runnable介面來實現執行緒,問題是,那個方法更好呢?什麼情況下使用它?這個問題很容易回答,如果你知道Java不支援類的多重繼承,但允許你呼叫多個介面。所以如果你要繼承其他類,當然是呼叫Runnable介面好了。更多詳細資訊請點選這裡。

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

這個問題經常被問到,但還是能從此區分出面試者對Java執行緒模型的理解程度。start()方法被用來啟動新建立的執行緒,而且start()內部呼叫了run()方法,這和直接呼叫run()方法的效果不一樣。當你呼叫run()方法的時候,只會是在原來的執行緒中呼叫,沒有新的執行緒啟動,start()方法才會啟動新執行緒。更多討論請點選這裡

7) Java中Runnable和Callable有什麼不同?

Runnable和Callable都代表那些要在不同的執行緒中執行的任務。Runnable從JDK1.0開始就有了,Callable是在JDK1.5增加的。它們的主要區別是Callable的 call() 方法可以返回值和丟擲異常,而Runnable的run()方法沒有這些功能。Callable可以返回裝載有計算結果的Future物件。我的部落格有更詳細的說明。

8) Java中CyclicBarrier 和 CountDownLatch有什麼不同?

CyclicBarrier 和 CountDownLatch 都可以用來讓一組執行緒等待其它執行緒。與 CyclicBarrier 不同的是,CountdownLatch 不能重新使用。點此檢視更多資訊和示例程式碼。

9) Java記憶體模型是什麼?

Java記憶體模型規定和指引Java程式在不同的記憶體架構、CPU和作業系統間有確定性地行為。它在多執行緒的情況下尤其重要。Java記憶體模型對一個執行緒所做的變動能被其它執行緒可見提供了保證,它們之間是先行發生的關係。這個關係定義了一些規則讓程式設計師在併發程式設計時思路更清晰。比如,先行發生的關係確保了:

執行緒內的程式碼能夠按先後順序執行,這被稱為程式次序規則。

對於同一個鎖,一個解鎖操作一定要發生在時間上後發生的另一個鎖定操作之前,也叫做管程鎖定規則。

前一個對volatile的寫操作在後一個volatile的讀操作之前,也叫volatile變數規則。

一個執行緒內的任何操作必需在這個執行緒的start()呼叫之後,也叫作執行緒啟動規則。

一個執行緒的所有操作都會在執行緒終止之前,執行緒終止規則。

一個物件的終結操作必需在這個物件構造完成之後,也叫物件終結規則。

可傳遞性

我強烈建議大家閱讀《Java併發程式設計實踐》第十六章來加深對Java記憶體模型的理解。

10) Java中的volatile 變數是什麼?