Java執行緒的狀態和實現方式

2021-09-24 03:41:10 字數 1783 閱讀 2621

執行緒的狀態圖

執行緒狀態:

1. 新建狀態(new) :執行緒物件被建立後,就進入了新建狀態。例如,thread thread = new thread()。

2. 就緒狀態(runnable): 也被稱為「可執行狀態」。執行緒物件被建立後,其它執行緒呼叫了該物件的start()方法,從而來啟動該執行緒。例如,thread.start()。處於就緒狀態的執行緒,隨時可能被cpu排程執行。

3. 執行狀態(running): 執行緒獲取cpu許可權進行執行。需要注意的是,執行緒只能從就緒狀態進入到執行狀態。

4. 阻塞狀態(blocked): 阻塞狀態是執行緒因為某種原因放棄cpu使用權,暫時停止執行。直到執行緒進入就緒狀態,才有機會轉到執行狀態。阻塞的情況分三種:

(1) 等待阻塞 – 通過呼叫執行緒的wait()方法,讓執行緒等待某工作的完成。

(2) 同步阻塞 – 執行緒在獲取synchronized同步鎖失敗(因為鎖被其它執行緒所占用),它會進入同步阻塞狀態。

(3) 其他阻塞 – 通過呼叫執行緒的sleep()或join()或發出了i/o請求時,執行緒會進入到阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者i/o處理完畢時,執行緒重新轉入就緒狀態。

5. 死亡狀態(dead): 執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期。

這5種狀態涉及到的內容包括object類, thread和synchronized關鍵字。

object類,定義了wait(), notify(), notifyall()等休眠/喚醒函式。

thread類,定義了一些列的執行緒操作函式。例如,sleep()休眠函式, interrupt()中斷函式, getname()獲取執行緒名稱等。

synchronized,是關鍵字;它區分為synchronized**塊和synchronized方法。synchronized的作用是讓執行緒獲取物件的同步鎖。

實現多執行緒的兩種方式:thread和runnable

runnable介面的定義:

public inte***ce runnable

runnable的作用,實現多執行緒。我們可以定義乙個類a實現runnable介面;然後,通過new thread(new a())等方式新建執行緒。

thread 是乙個類。thread本身就實現了runnable介面。它的宣告如下:

public class thread implements runnable {}

thread的作用,實現多執行緒。

thread和runnable的異同點:

thread 和 runnable 的相同點:都是「多執行緒的實現方式」。

thread 和 runnable 的不同點:

thread 是類,而runnable是介面;thread本身是實現了runnable介面的類。我們知道「乙個類只能有乙個父類,但是卻能實現多個介面」,因此runnable具有更好的擴充套件性。

此外,runnable還可以用於「資源的共享」。即,多個執行緒都是基於某乙個runnable物件建立的,它們會共享runnable物件上的資源。

通常,建議通過「runnable」實現多執行緒!

Java多執行緒的實現方式

多執行緒有3種實現的方法 繼承thread 類建立執行緒 實現了runnable介面介面建立執行緒 通過可callable和futrue建立執行緒 第一種 繼承thread類建立執行緒,步驟如下 建立乙個thread類的子類。覆蓋thread類的run 中的方法。建立所定義的子類的乙個物件。呼叫該物...

Java執行緒 執行緒狀態

執行緒可以建立6狀態 new 新建立 runnable 可執行 blocked 被阻塞 waiting 等待 timed waiting 計時等待 terminated 被終止 1 新建執行緒 2 可執行執行緒 一旦呼叫start 方法,執行緒就處於runnable狀態,但是卻不必保持執行。執行中的...

java執行緒的狀態

new 狀態是指執行緒剛建立,尚未啟動 runnable 狀態是執行緒正在正常執行中,當然可能會有某種耗時計算 io等待的操作 cpu時間片切換等,這個狀態下發生的等待一般是其他系統資源,而不是鎖,sleep等 blocked 這個狀態下,是在多個執行緒有同步操作的場景,比如正在等待另乙個執行緒的s...