當前位置:才華齋>計算機>java語言>

Java執行緒面試題

java語言 閱讀(1.15W)

引導語:Java 不同於一般的編譯執行計算機語言和解釋執行計算機語言。面試試題考察的方式也不一樣以下是小編整理的Java執行緒面試題,歡迎參考閱讀!

Java執行緒面試題

  ▎1.什麼是執行緒?

執行緒是作業系統能夠進行運算排程的最小單位,它被包含在程序之中,是程序中的實際運作單位。程式設計師可以通過它進行多處理器程式設計,你可以使用多執行緒對運算密集型任務提速。

比如,如果一個執行緒完成一個任務要100毫秒,那麼用十個執行緒完成改任務只需10毫秒。Java在語言層面對多執行緒提供了卓越的支援,它也是一個很好的賣點。

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

執行緒是程序的子集,一個程序可以有很多執行緒,每條執行緒並行執行不同的任務。

不同的程序使用不同的記憶體空間,而所有的執行緒共享一片相同的記憶體空間。

別把它和棧記憶體搞混,每個執行緒都擁有單獨的棧記憶體用來儲存本地資料。

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

在語言層面有兩種方式。

ad 類的例項就是一個執行緒,但是它需要呼叫able介面來執行,由於執行緒類本身就是呼叫的Runnable介面所以你可以繼承ad 類或者直接呼叫Runnable介面來重寫run()方法實現執行緒。

  ▎4.用Runnable還是Thread?

這個問題是上題的後續,大家都知道我們可以通過繼承Thread類或者呼叫Runnable介面來實現執行緒,問題是,那個方法更好呢?什麼情況下使用它?

這個問題很容易回答,如果你知道Java不支援類的多重繼承,但允許你呼叫多個介面。

所以如果你要繼承其他類,當然是呼叫Runnable介面好了。

  ▎5.什麼是執行緒安全?Vector是一個執行緒安全類嗎?

如果你的程式碼所在的程序中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。

如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。

一個執行緒安全的計數器類的.同一個例項物件在被多個執行緒使用的情況下也不會出現計算失誤。很顯然你可以將集合類分成兩組, 執行緒安全和非執行緒安全的。

Vector 是用同步方法來實現執行緒安全的, 而和它相似的ArrayList不是執行緒安全的。

  ▎ad 類中的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記憶體模型對一個執行緒所做的變動能被其它執行緒可見提供了保證,它們之間是先行發生一定的關係。

這個關係定義了一些規則讓程式設計師在併發程式設計時思路更清晰。

  ▎10. Java中的volatile 變數是什麼?

volatile是一個特殊的修飾符,只有成員變數才能使用它。

在Java併發程式缺少同步類的情況下,多執行緒對成員變數的操作對其它執行緒是透明的。

volatile變數可以保證下一個讀取操作會在前一個寫操作之後發生,就是上一題的volatile變數規則。