六種執行緒狀態詳解

2021-10-04 08:54:42 字數 2458 閱讀 7356

執行緒從建立到執行到結束是乙個執行緒的生命週期,當執行緒被建立到結束過程中,不是一直處於執行狀態的,下面來介紹一下執行緒從執行到結束所有的狀態.

執行緒狀態

導致狀態發生條件

new(新建)

執行緒剛被建立,沒有啟動,也就是還沒呼叫start()方法.mythread t = new mythread只有執行緒物件,沒有執行緒特徵。

runnable(可執行)

這個時候執行緒已經呼叫了start方法,進入可執行狀態

blocked(鎖阻塞)

當乙個執行緒想要獲取乙個物件鎖,而該物件鎖被其他執行緒持有,該執行緒就進入了鎖阻塞狀態,當該執行緒得到鎖物件時,就變成了runnable(可執行)狀態.

waiting(無限等待)

乙個執行緒等待另乙個執行緒被notify(喚醒)的動作時,該執行緒進入無限等待狀態,這個狀態是不自動喚醒的,只有等待另乙個執行緒被notify之後才能夠被喚醒.

timed waiting(計時等待)

sleep設定的時間超時了,wait時間超時搶到了鎖物件或中途被notify之後搶到了鎖物件,在這個過程中,是計時等待狀態

teminated(被終止)

有三種情況:呼叫了stop方法、正常退出run方法正常死亡、出現了異常沒有捕獲到

接下來看一下詳細**:

或者,wait(time)中途被notify(喚醒),需要重新獲取鎖物件,如果搶到鎖了,會繼續執行,如果沒有搶到鎖,該執行緒會進入鎖阻塞的狀態.

wait與notify

兩個都是object類中的方法,這兩個方法必須在同乙個鎖物件中,

wari一旦進入無限等待狀態,會釋放鎖,往後背notify喚醒之後,也需要重新搶鎖,搶到了,繼續執行,搶不到,鎖阻塞.

**notify:**喚醒一條等待的執行緒,如果有多個執行緒需要被喚醒,notify會在其中隨機喚醒乙個.

public

class

mythread

catch

(interruptedexception e)

}//新增元素

list.

add(

"張三");

system.out.

println

(list)

;//喚醒取資料的執行緒

list.

notify()

;}}}

}).start()

;//建立取資料的執行緒

newthread

(new

runnable()

catch

(interruptedexception e)

}//獲取元素

list.

remove(0

);system.out.

println

(list)

;//喚醒存資料的執行緒

list.

notify()

;}}}

}).start();}}

需求:

請用「等待喚醒」機制編寫乙個程式,要求:

第乙個執行緒:遍歷1–1000所有的數字,在遍歷過程中,如果發現這個數字能 同時被2,3,5,7整除,立即wait()退出等待,讓第二個執行緒進入。

第二個執行緒:執行後,將乙個計數器 + 1,之後再喚醒等待的執行緒。

主線程中:休息2秒,讓兩個執行緒全部執行完畢,列印「計數器」的結果。

public

class

test

catch

(interruptedexception e)

system.out.

println

("計數器結果是:"

+thread2.count);}

}class

lock

class

thread1

extends

thread

@override

public

void

run(

)catch

(interruptedexception e)

}//喚醒另外乙個執行緒

lock.

notify()

;}}}

}class

thread2

extends

thread

public

int count =0;

@override

public

void

run(

)try

catch

(interruptedexception e)}}

}}

JAVA多執行緒的六種狀態例項

多執行緒六種狀態例項,最下方圖是執行 流程,希望對你有幫助!多執行緒的六種狀態 public class threadstatustest catch interruptedexception e 同步鎖 synchronized obj catch interruptedexception e s...

Thread的六種狀態

執行緒共有6種狀態 在某一時刻只能是這6種狀態之一。這些狀態由thread.state這個列舉型別表示,並且可以通過getstate 方法獲得當前具體的狀態型別。包括 new,runnable,blocked,waiting,timed waiting,terminatmed new至今尚未啟動的執...

Bundle的狀態有六種

installed resolved starting active stopping uninstalled 注意 1 即使bundle已經停止,其export的package仍然是可以使用的,這也就意味著可以執行resolved狀態的bundle中export package的類。2 bundl...