Java 多執行緒狀態轉換

2021-07-15 06:38:59 字數 992 閱讀 5622

圖中是執行緒執行的基本狀態:執行緒呼叫start()方法開始後,就進入到可執行狀態,隨著cpu的資源排程在執行和可執行之間切換;遇到阻塞則進入阻塞狀態。

二三的狀態圖中只不過執行緒被阻塞的情況分為很多種,後面的圖是細化說明。

當乙個執行緒執行了start方法後,不代表這個執行緒就會立即被執行,只代表這個執行緒處於可執行的狀態,最終由os的執行緒排程來決定哪個可執行狀態下的執行緒被執行。

running --> runnable

running --> blocked

blocked --> runnable

lock pool --> runnable

當資源被乙個執行緒訪問時,上鎖,其他執行緒就進入了乙個鎖池(lock pool)

當鎖被釋放,其他執行緒獲得了鎖,就變為可執行狀態。

加入執行緒間的相互作用

執行緒呼叫了wait()方法之後,釋放掉鎖,進入等待池(wait pool);收到通知之後等待獲取鎖,獲取鎖之後才可以執行。

1.呼叫sleep(毫秒數),使執行緒進入睡眠狀態。在規定時間內,這個執行緒是不會執行的。

2.用suspend()暫停了執行緒的執行。除非收到resume()訊息,否則不會返回「可執行」狀態。

3.用wait()暫停了執行緒的執行。除非執行緒收到notify()或notifyall()訊息,否則不會變成「可執行」狀態。

4.執行緒正在等候一些io操作完成。

5.執行緒試圖呼叫另乙個物件的「同步」方法,但那個物件處於鎖定狀態,暫時無法使用。

執行緒同步各個方法的區別

java多執行緒狀態轉換

1 新建狀態 new 新建立了乙個執行緒物件。2 就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。3 執行狀態 running 就緒狀態的執行緒獲取了cpu,執行程式 4 阻塞狀態 blo...

java多執行緒 執行緒狀態轉換

img 1.新建 new 新建立了乙個執行緒物件。2.可執行 runnable 執行緒物件建立後,其他執行緒 比如main執行緒 呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,等待被執行緒排程選中,獲取cpu 的使用權 3.執行 running 可執行狀態 runnable 的...

Java多執行緒 執行緒狀態

from 一.執行緒狀態型別 1.新建狀態 new 新建立了乙個執行緒物件。2.就緒狀態 runnable 執行緒物件建立後,其他執行緒呼叫了該物件的start 方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取cpu的使用權。3.執行狀態 running 就緒狀態的執行緒獲取了cpu,...