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

Java 線程深度解析:生命週期、調度、同步與死鎖

     編輯:Java 相關知識

基本概念

  • 進程:運行中的程序,獨立記憶體空間
  • 線程:進程內單一順序控制流,「輕量級進程」,共享進程資源,擁有獨立棧和程序計數器
  • Java 中連最簡單的 Applet 也是多線程(AWT 繪圖線程、主線程調用 init/start/stop/destroy)

線程五大核心屬性

1. 線程體

繼承 Thread 重寫 run(),或實現 Runnable 接口。啟動後 JVM 自動調用 run()。

2. 線程狀態(四態)

  • 新建:new Thread(),僅對象,無資源,只能 start() 或銷毀
  • 可運行:start() 分配資源、排隊等待 CPU,非持續佔用 CPU
  • 非運行:suspend()、sleep()、wait()、I/O 等待
  • 死亡:run() 結束或 stop() 強制終止

3. 線程優先級與調度

  • 固定優先級調度:高優先級搶佔 CPU
  • 同優先級輪轉
  • 子線程繼承父線程優先級,可動態調整
  • 強制性搶佔:高優先級線程變為可運行時立即搶佔

4. 守護線程

為其他線程服務(如 GC、圖片預加載),run() 通常為無限循環等待請求。JVM 僅剩守護線程時自動退出。

5. 線程組

ThreadGroup 批量管理線程(啟動/掛起/銷毀),線程創建時指定或歸入默認組,終身不可變更。

多線程編程兩大難點

同步機制

  • 每個對象天然擁有一把鎖
  • synchronized 隱式實現加鎖/解鎖(方法級或塊級)
  • 最佳實踐:共享變量的所有訪問均在同步塊/方法中

協作模式:wait/notify

// 線程1 生產數據
synchronized void produce() {
    // ... 訪問共享區 ...
    available = true;
    notify();  // 喚醒消費者
}

// 線程2 消費數據
synchronized void consume() {
    while (!available) {
        try { wait(); } catch (InterruptedException e) {}
    }
    // ... 訪問共享區 ...
}

wait() 釋放鎖並進入非運行態;notify() 喚醒一線程重新爭搶鎖。

死鎖預防

  • Java 無死鎖檢測,需開發者預防
  • 最簡策略:對共享資源編號,線程必須按編號遞增順序獲取鎖

總結

線程是 Java 核心特性,同步互斥雖不如系統級豐富,但合理使用 synchronized、wait/notify、優先級、守護線程、線程組,配合死鎖預防原則,足以構建健壯併發程序。

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