1. 程式人生 > 其它 >java多執行緒模型

java多執行緒模型

一、執行緒狀態:

新建狀態(New):新建立了一個執行緒物件。

就緒狀態(可執行狀態,Runnable):執行緒物件建立後,其他執行緒呼叫了該物件的start()方法。該狀態的執行緒位於可執行執行緒池中,變得可執行,等待獲取CPU的使用權。

執行狀態(執行狀態,Running):就緒狀態的執行緒獲取了CPU,執行程式程式碼。

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

(1) 等待阻塞:執行的執行緒執行wait()方法,該執行緒進入等待池中                   

(2) 同步阻塞:執行的執行緒在獲取物件的同步鎖時,若該同步鎖被別的執行緒佔用,則該執行緒進入鎖池中

(3) 其他阻塞:執行的執行緒執行sleep()或join()方法,或者發出了I/O請求時,該執行緒置為阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者I/O處理完畢時,執行緒重新轉入就緒狀態。

死亡狀態

(Dead):執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期

二、理解執行緒的優先權

接下來,理解執行緒優先順序是很重要的一步,尤其是瞭解 yield() 函式的工作過程:

1、記住當執行緒的優先順序沒有指定時,所有執行緒都攜帶普通優先順序。
2、優先順序可以用從 1 到 10 的範圍指定。10 表示最高優先順序,1 表示最低優先順序,5 是普通優先順序。
3、記住優先順序最高的執行緒在執行時被給予優先。但是不能保證執行緒在啟動時就進入執行狀態。
4、與線上程池中等待執行機會的執行緒相比,當前正在執行的執行緒可能總是擁有更高的優先順序。
5、由排程程式決定哪一個執行緒被執行。
6、t.setPriority() 用來設定執行緒的優先順序。
7、記住線上程 start() 方法被呼叫之前,執行緒的優先順序應該被設定。
8、你可以使用常量,如 MIN_PRIORITY,MAX_PRIORITY,NORM_PRIORITY 來設定優先順序。


(3)Thread.yield

  方法作用: 讓當前執行緒從執行狀態 轉為 就緒狀態,以允許具有相同優先順序的其他執行緒獲得執行機會。
————————————————
版權宣告:本文為CSDN博主「冷鋒-」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/y532798113/article/details/103997066