首頁 >Java >Java面試題 >2020全新Java面試題-多執行緒(一)

2020全新Java面試題-多執行緒(一)

王林
王林轉載
2020-04-25 17:54:422220瀏覽

2020全新Java面試題-多執行緒(一)

一、並行和並發有什麼差別?

並行是指兩個或多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔發生。

並行是在不同實體上的多個事件,並發是在同一實體上的多個事件。

並行是在一台處理器上「同時」處理多個任務,並發是在多台處理器上同時處理多個任務。如hadoop分散式集群。

所以並發程式設計的目標是充分的利用處理器的每一個核,以達到最高的處理效能。

(相關影片教學推薦:java影片

二、執行緒與進程的差別?

簡而言之,進程是程式運作和資源分配的基本單位,一個程式至少有一個行程,一個行程至少有一個執行緒。進程在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體資源,減少切換次數,進而效率更高。執行緒是進程的一個實體,是cpu調度和分派的基本單位,是比程式更小的能獨立運作的基本單位。同一進程中的多個執行緒之間可以並發執行。

三、守護線程是什麼?

守護線程(即daemon thread),是個服務線程,準確地說就是服務其他的線程。

四、創建線程有哪幾種方式?

(1)繼承Thread類別建立執行緒類別

定義Thread類別的子類,並重寫該類別的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run()方法稱為執行體。

建立Thread子類別的實例,即建立了執行緒物件。

呼叫執行緒物件的start()方法來啟動該執行緒。

(推薦教學:java入門程式

(2)透過Runnable介面建立執行緒類別

定義runnable介面的實作類,並重寫該介面的run()方法,該run()方法的方法體同樣是該執行緒的執行緒執行體。

建立 Runnable實作類別的實例,並依此實例作為Thread的target來建立Thread對象,該Thread對象才是真正的執行緒對象。

呼叫執行緒物件的start()方法來啟動該執行緒。

(3)透過Callable和Future建立執行緒

建立Callable介面的實作類,並實作call()方法,該call()方法將作為執行緒執行體,並且有傳回值。

建立Callable實作類別的實例,使用FutureTask類別來包裝Callable對象,該FutureTask物件封裝了該Callable物件的call()方法的傳回值。

使用FutureTask物件作為Thread物件的target建立並啟動新執行緒。

呼叫FutureTask物件的get()方法來取得子執行緒執行結束後的回傳值。

五、說一下 runnable 和 callable 有什麼不同?

有點深的問題了,也看出一個Java程式設計師學習知識的廣度。

Runnable介面中的run()方法的回傳值是void,它所做的事情只是純粹地去執行run()方法中的程式碼而已;

Callable介面中的call( )方法是有回傳值的,是一個泛型,和Future、FutureTask配合可以用來得到非同步執行的結果。

想知道更多java面試題請關注java高階面試題欄位。

以上是2020全新Java面試題-多執行緒(一)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除