| 維度 | 進程 | 線程 |
|---|---|---|
| 資源 | 獨立記憶體空間、系統資源 | 共享進程記憶體、獨立堆棧與上下文 |
| 建立開銷 | 大(fork 複製地址空間) | 小(輕量級進程 LWP) |
| 通訊 | IPC(管道、Socket 等)複雜 | 共享記憶體直接交換,簡單 |
| 調度 | OS 核心調度 | JVM 線程調度器(用戶級/核心級視實作) |
多線程不增加 CPU 算力;唯在多核或分散式架構下並行執行才提升吞吐。對阻塞型 I/O(網路、資料庫),多線程能顯著改善回應時間(如伺服器每連線一線程)。
class Consumer extends Thread {
public void run() { /* 任務邏輯 */ }
}
new Consumer(1000, "A").start();
class Consumer implements Runnable {
public void run() { /* 任務邏輯 */ }
}
new Thread(new Consumer(1000, "A")).start();
優勢:不佔用繼承名額,邏輯與控制分離,利於線程池複用。
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()(已棄用)setPriority()/getPriority() 動態調整。setDaemon(true) 標記為低優先級服務線程(如 GC),僅在用戶線程全結束時 JVM 才退出。
ThreadGroup 樹狀管理,支援批量操作(中斷、優先級設定、列舉)。預設屬於 main 組。
Java 內建多線程支援,語法簡潔、共享記憶體通訊高效,為高併發網路程式(伺服器端)奠定堅實基礎。掌握同步、狀態、調度、守護線程等機制,是寫出穩健併發程式的必修課。