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

Java 多執行緒機制全解析:從進程差異到同步、調度與守護線程

     編輯:Java 相關知識

進程 vs 線程:核心區別

維度進程線程
資源獨立記憶體空間、系統資源共享進程記憶體、獨立堆棧與上下文
建立開銷大(fork 複製地址空間)小(輕量級進程 LWP)
通訊IPC(管道、Socket 等)複雜共享記憶體直接交換,簡單
調度OS 核心調度JVM 線程調度器(用戶級/核心級視實作)

多線程不增加 CPU 算力;唯在多核或分散式架構下並行執行才提升吞吐。對阻塞型 I/O(網路、資料庫),多線程能顯著改善回應時間(如伺服器每連線一線程)。

兩種實作方式

1. 繼承 Thread

class Consumer extends Thread {
    public void run() { /* 任務邏輯 */ }
}
new Consumer(1000, "A").start();

2. 實作 Runnable(推薦)

class Consumer implements Runnable {
    public void run() { /* 任務邏輯 */ }
}
new Thread(new Consumer(1000, "A")).start();

優勢:不佔用繼承名額,邏輯與控制分離,利於線程池複用。

線程同步:synchronized 關鍵字

public class RegisterAccount {
    private float balance;
    public synchronized void deposit(float fee) { balance += fee; }
    public synchronized void withdraw(float fee) { balance -= fee; }
}

同步方法隱式鎖定 this,確保共享資源(balance)同一時間僅一線程訪問。也可用 synchronized(obj) 同步區塊縮小鎖範圍。

線程生命週期與狀態控制

  • 新建 → start() → 就緒 → 調度器派發 → 運行
  • 睡眠:sleep(ms) 釋放 CPU、保留鎖
  • 等待/通知:wait()/notify() 釋放鎖、進入等待集
  • 阻塞:嘗試獲取鎖失敗
  • 死亡:run() 結束或 stop()(已棄用)

調度策略:優先級 + 搶佔式 + 時間片輪轉

  • 10 級優先級(1-10,預設 5),高優先級優先執行。
  • 搶佔式:高優線程就緒即搶佔 CPU。
  • 同優先級:輪轉分時。
  • setPriority()/getPriority() 動態調整。

守護線程

setDaemon(true) 標記為低優先級服務線程(如 GC),僅在用戶線程全結束時 JVM 才退出。

線程組

ThreadGroup 樹狀管理,支援批量操作(中斷、優先級設定、列舉)。預設屬於 main 組。

總結

Java 內建多線程支援,語法簡潔、共享記憶體通訊高效,為高併發網路程式(伺服器端)奠定堅實基礎。掌握同步、狀態、調度、守護線程等機制,是寫出穩健併發程式的必修課。

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