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

Java 多線程核心基礎:進程與線程、優勢、生命週期全景圖

     編輯:Java 相關知識

從單任務到並發時代

DOS 時代一次只能跑一個程式;現代 OS 支援多進程並發(QQ、Word、瀏覽器同時開)。Java 在單一進程內部進一步引入線程,實現更細粒度的並發:

  • 進程:資源分配單位,擁有獨立記憶體空間,通訊麻煩(IPC)。
  • 線程:CPU 排程單位,隸屬於進程,共享進程記憶體(堆、方法區),通訊高效(共享變數)。

線程被稱為「輕量級進程」,建立/切換開銷遠小於進程。

多線程兩大核心優勢

優勢說明典型場景
提升響應速度耗時任務(網路、IO、計算)放背景線程,UI 線程保持流暢Swing/JavaFX 應用、Android ANR 避免
充分利用多核 CPU多線程並行計算,榨乾硬體效能影像處理、科學計算、高併發伺服器

⚠️ 線程過多會導致頻繁上下文切換,反而降低效能。實際專案需配合線程池控制併發度。

線程生命週期狀態機

        ┌─────────┐
        │  NEW    │  new Thread()
        └────┬────┘
             │ start()
             ▼
    ┌───────────────┐
    │  RUNNABLE     │ ◄────────────────┐
    │ (就緒/運行)    │                │
    └───────┬───────┘                │
            │                        │
     ┌──────┴──────┐                 │
     │             │                 │
 sleep()      wait() / join()        │
     │             │                 │
     ▼             ▼                 │
┌─────────┐  ┌──────────┐            │
│ TIMED_  │  │  BLOCKED │            │
│ WAITING │  │  (鎖等待) │            │
└────┬────┘  └────┬─────┘            │
     │            │                  │
     │ timeout/   │ notify()/        │
     │ interrupt  │ lock released    │
     ▼            ▼                  │
    ┌───────────────────────────────┐
    │          TERMINATED           │  run() 結束 / 異常退出
    └───────────────────────────────┘

六大標準狀態

  1. NEW:物件建立,未 start()。
  2. RUNNABLE:包含就緒與運行,等待 CPU 時間片。
  3. BLOCKED:等待監視器鎖(進入 synchronized 區塊被阻擋)。
  4. WAITING:無限期等待,需 notify()/interrupt() 喚醒。
  5. TIMED_WAITING:有超時等待,sleep()/wait(timeout)/join(timeout)。
  6. TERMINATED:執行緒結束。

常用控制方法速查

方法作用注意事項
start()啟動線程只能呼叫一次
sleep(ms)當前線程讓出 CPU 休眠靜態方法,不釋放鎖
yield()提示排程器讓出 CPU不保證生效,僅作提示
join()等待該線程終止常用於主線程等待子線程
interrupt()發送中斷信號不強制停止,需配合檢查
isInterrupted()檢查中斷狀態不清除標誌
Thread.interrupted()檢查並清除中斷狀態靜態方法

經典啟動流程圖解


// 主線程
main() {
    Thread t = new MyThread(); // NEW
    t.start();                 // → RUNNABLE (新線程)
    // 主線程繼續...
}

// 新線程
run() {
    // RUNNABLE → RUNNING → ... → TERMINATED
}

總結

掌握進程/線程區別、多線程優勢與代價、六大狀態流轉、核心控制 API,是寫出正確、高效併發程式的基石。下一章將實戰演示三種線程實現方式。

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