一、並行和並發有什麼差別?
並行是指兩個或多個事件在同一時刻發生;而並發是指兩個或多個事件在同一時間間隔發生。
並行是在不同實體上的多個事件,並發是在同一實體上的多個事件。
並行是在一台處理器上「同時」處理多個任務,並發是在多台處理器上同時處理多個任務。如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中文網其他相關文章!