當前位置:
首頁 > 知識 > 多線程編程——part 2 線程的生命周期和優先順序

多線程編程——part 2 線程的生命周期和優先順序

線程的創建到消亡的歷程:

多線程編程——part 2 線程的生命周期和優先順序

java多線程的5種狀態:

(1)New(新建)

new Thread(run) 該線程還沒開始運行,狀態是new,在程序運行前還有一些基礎工作要做

(2)runnable(就緒)

一旦調用start方法,線程就處於runnable狀態,可運行的線程可能正在運行,也可能沒有運行,取決於操作系統給線程的時間片,放在可運行線程池中,等待CPU的使用權

(3)Blocked(阻塞)

阻塞狀態是線程因為某種原因放棄了CPU使用權,暫時停止運行,直到線程進入就緒狀態。阻塞情況分三種:

1.等待狀態:運行狀態線程執行wait方法,JVM把該線程放入等待池中

2.同步阻塞:線程獲取對象的同步鎖,鎖被別的線程佔用,JVM把線程放入鎖池中

3.其他阻塞:線程執行sleep,join,或者發出I/O請求,JVM把線程置為阻塞狀態,sleep超時,join等待線程終止或超時,或者I/O處理完畢,線程重新進入就緒狀態

(4)running(運行)

就緒狀態線程獲取CPU時間片,開始執行代碼

(5)dead(死亡)

線程run,main方法執行完畢結束,或者因異常退出了run方法,則該線程結束生命周期,死亡的線程不可再次復生。

多線程編程——part 2 線程的生命周期和優先順序

線程的優先順序:

線程的優先順序是為了在多線程環境便於系統對線程的調度,優先順序高的線程優先執行,但是不能依靠線程的優先順序來決定線程的執行順序。

線程創建時,子繼承父的優先順序,可通過setPriority方法改變優先順序,默認值是5,範圍1-10

線程調度策略:

線程調度器會選擇優先順序更高的線程運行,但是發生以下情況,會終止線程的運行:

(1)調用yield方法,讓出了對CPU的佔用

(2)調用了sleep方法

(3)線程進行I/O操作而受阻

(4)另一個更高優先順序的線程出現

(5)該線程的時間片用完

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

Swift和Javascript的神奇魔法
27_Redis:在Linux上的安裝、Jedis和常用命令
jquery源碼 Callback
Docker下搭建Jenkins構建環境

TAG:達人科技 |

您可能感興趣

入門Python多線程/多進程編程
android 多線程編程
Python 並發編程之線程池/進程池
Python學習之進程和線程
Android 進程和線程
Python的Socket知識6:線程、線程鎖、線程池、上下文管理
線程,進程,程序的區別
Linux中進程與線程的概念以及區別
C++11並發編程:多線程std:thread
C++11多線程 多線程傳參詳解
鄔小編講多線程
PyQt5+ Python3 多線程通信
數據科學愛用程序語言Julia將加入多線程平行運算功能
進程與線程的區別
python threading中處理主進程和子線程的關係
深入理解Flutter引擎線程模式
Intel九代酷睿標壓版曝光:i7升級8核心8線程
詳解 Tomcat 的連接數與線程池
python筆記12-python多線程之事件
新一代Ryzen處理器偷跑測試,單線程性能大幅提升