多線程被認為是計算機編程中更復雜的主題之一,特別是在 Java 中。在應用程序中正確使用多線程需要高水平的技能、知識和經驗。
以下是Java中多線程接口和類的一些核心概念和解釋:
線程:在Java中,線程類是與多線程相關的最重要的類。線程可以通過擴展這個類來實現。本文稍后將演示它的用法。在生產或開發環境中,開發人員可能會發現修復與多線程相關的問題非常困難。了解鎖可能有助于解決最令人困惑和最常見的錯誤,即使是經驗豐富的 Java 程序員也難以理解。
Runnable:Runnables 是另一種創建線程的方法。你可以通過實現 Runnable 接口或擴展線程類在 Java 中創建線程。在這種情況下,開發人員必須從這個接口重寫 run() 方法來實現邏輯。(注意:Thread 類已經實現了 Runnable)。為了更好地理解多線程,請嘗試在下面顯示的每個方法中記住共享對象的鎖定狀態(如果適用)。
start(), Lock Status:可以獲取鎖。調度線程運行時調用此方法。線程一旦被調度并且 CPU 周期可用,就會運行。
run(), Lock Status:可以獲取鎖;它被 Thread 運行時隱式調用,以開始執行線程。
yield(), Lock Status:鎖被持有;這種特殊的方法要么產生或將控制權轉移到具有相同優先級的不同線程。不能保證它將控制權轉移到哪個線程——或者它是否會轉移控制權——并不能保證。下面的示例代碼顯示了如何通過擴展線程類在 Java 中創建線程。
sleep(), Lock Status:鎖被持有;使用此方法將導致當前正在執行的線程在給定的時間內暫停其執行。可以以毫秒為單位指定執行暫停的時間量。將拋出一個中斷的異常,程序員需要解決這個問題。
join(), Lock Status:鎖被持有;使用它會導致執行模式,導致所有線程在當前線程的末尾加入。在這種情況下,當前線程在切換到另一個線程之前會繼續完成。這也會引發一個中斷的異常,開發人員需要解決這個異常。
suspend(), Lock Status:鎖被持有;這已被棄用。
resume(),鎖狀態:鎖被持有;這已被棄用;這兩個線程都已被棄用,因為它們會導致死鎖和凍結進程。
stop(), Lock Status:鎖被釋放; 這已被棄用; 這種特殊的線程方法已被棄用,因為它由于損壞的對象而創建了不規則的狀態。不建議使用。
Java 對象類和多線程
Java 的 Object 類固有地包含用于控制訪問該對象的方法,尤其是在共享或多線程應用程序中。
wait(),Lock Status:當前對象鎖釋放,其他鎖被持有; 使用 wait() 方法將導致當前線程停止執行并進入等待狀態。這也將釋放它放置在當前對象上的鎖,同時保留其他對象上的所有其他鎖。
notify(),鎖狀態:鎖被隨機等待線程獲取; notify() 方法將通知正在等待獲取當前共享對象上的鎖的線程。
notifyAll(),鎖狀態:鎖被任意線程獲取,等待獲取當前共享對象的鎖。將使用此方法通知所有等待獲取線程鎖的線程。
多線程和并發程序中常遇到的有Memory-interface、競爭條件、死鎖、活鎖和饑餓。問題是沒有止境的,如果你弄錯了,將很難發現和調試。這是大多數基于面試的,而不是基于實際應用的Java線程問題。想學習java多線程的同學建議通過參加java培訓來提升自己,在專業老師的指導下,可以獲得很大進步。
責任編輯:Rex_08