多線程編程——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方法,則該線程結束生命周期,死亡的線程不可再次復生。
線程的優先順序:
線程的優先順序是為了在多線程環境便於系統對線程的調度,優先順序高的線程優先執行,但是不能依靠線程的優先順序來決定線程的執行順序。
線程創建時,子繼承父的優先順序,可通過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處理器偷跑測試,單線程性能大幅提升