首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

作業系統進程五大狀態與 Java 執行緒生命週期完整對照

     編輯:Java 綜合教學

作業系統進程五大狀態與 Java 執行緒生命週期完整對照

Java 執行緒的五種狀態本質上繼承自作業系統進程管理理論。本文從進程控制塊(PCB)、狀態轉換原語、三級排程、同步互斥機制、死鎖條件等核心概念切入,建立完整的並發基礎知識體系。

一、進程五大狀態與轉換條件

狀態定義進入條件離開條件
初始態進程剛建立,資源未就緒建立進程獲得資源,進入就緒隊列
就緒態已獲除 CPU 外所有資源,等待排程初始化完成 / 時間片用完 / 釋放鎖 / I/O 完成被排程器選中,獲得 CPU
執行態佔用 CPU 正在執行就緒態被排程時間片用完 / 主動阻塞 / 更高優先級搶佔 / 結束
等待態(阻塞)等待事件(I/O、鎖、訊號)執行態呼叫阻塞原語事件發生,喚醒原語,進入就緒隊列
終止態執行結束或異常退出程式正常結束 / 錯誤 / 被殺掉資源回收,PCB 釋放

關鍵區別:就緒態 vs 等待態

分配 CPU 能否立即執行? 能 → 就緒態;否 → 等待態(仍缺資源或事件)。

二、進程控制與原語機制

  • 進程控制功能:建立、撤銷、阻塞、喚醒 —— 由作業系統核心實現。
  • 原語:若干機器指令組成的不可分割程式段,執行期間不可中斷,保證原子性。
  • 阻塞原語流程:執行態 → 中斷處理/保護現場 → 變阻塞態 → 插入等待隊列 → 轉排程器選就緒進程。
  • 喚醒方式:系統進程喚醒 / 事件發生進程喚醒。

三、處理機三級排程

層級名稱頻率功能對象
高級作業排程幾分鐘一次從外存選作業入記憶體,建立進程作業
中級交換排程中等外存對換區與記憶體間調度進程進程
低級進程排程幾十毫秒一次從就緒隊列選進程佔用 CPU進程

作業排程演算法

  • 先來先服務 (FCFS)
  • 短作業優先 (SJF) —— 可能導致長作業飢餓

進程排程演算法

  • FCFS(非搶佔)
  • SJF(非搶佔)
  • 優先級排程(可搶佔/非搶佔)
  • 時間片輪轉 (RR) —— 現代分時系統核心,引入「執行→就緒」轉換

四、進程同步與互斥

兩種制約關係

  1. 間接制約(互斥):共享資源獨佔。四大原則:空閒讓進、忙則等待、有限等待、讓權等待。
  2. 直接制約(同步):進程間依賴傳遞訊息/資料,缺一不可。

臨界區

不允許多進程交叉執行的程式段(必須一次執行完,不可中斷)。

P/V 原語與訊號量

  • sem >= 0:可用資源數;sem < 0:等待進程數(絕對值)。
  • P(sem):sem--;若 >=0 繼續執行,若 <0 阻塞進入等待隊列。
  • V(sem):sem++;若 >0 結束;若 <=0 從等待隊列喚醒一進程。

五、死鎖四必要條件與處理策略

  1. 互斥條件:資源獨佔
  2. 請求保持:持有資源並請求新資源
  3. 不可剝奪:資源只能主動釋放
  4. 循環等待:進程形成環狀等待鏈

處理方法:預防(破壞條件)、避免(銀行家演算法)、檢測與解除、鴕鳥演算法(忽略,如大多數通用 OS)。

六、對應 Java 執行緒生命週期

進程狀態Java Thread 狀態對應方法/情境
初始態NEWnew Thread(),未 start()
就緒態RUNNABLEstart() 後、yield()、鎖釋放、I/O 完成
執行態RUNNABLE (running)獲得 CPU 執行 run()
等待態BLOCKED / WAITING / TIMED_WAITINGsynchronized 等鎖 / wait() / sleep() / join()
終止態TERMINATEDrun() 結束 / 異常拋出

核心啟示:理解作業系統層面的進程模型,能讓你更深刻掌握 Java 並發套件(java.util.concurrent)的設計哲學——鎖、Condition、Semaphore、ThreadPool 皆是對這些經典理論的工程化封裝。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved