判斷一個 Java 系統是否為多線程,關鍵在於觀察是否存在共享資料的並發存取與同步控制機制。
| 特徵 | 單線程系統 | 多線程系統 |
|---|---|---|
| 執行流程 | 單一呼叫堆疊,循序執行 | 多個執行緒並行,交錯執行 |
| 共享資料 | 無或僅單線程存取 | 多線程同時讀寫共享變數/物件 |
| 同步機制 | 不需鎖、synchronized、Lock | 必須使用同步工具保護臨界區 |
| 常見場景 | 簡單命令列工具、批次腳本 | Web 伺服器、GUI 應用、訊息佇列消費者 |
// 多線程特徵範例
public class Counter {
private int count = 0;
// 使用 synchronized 保護共享變數
public synchronized void increment() { count++; }
// 或使用 Lock
private final Lock lock = new ReentrantLock();
public void incrementWithLock() {
lock.lock();
try { count++; } finally { lock.unlock(); }
}
}
// 執行緒池使用
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> { /* 任務 */ });
總結:若程式碼中出現 synchronized、Lock、volatile、Atomic*、執行緒池、Thread.start() 等,即為多線程系統。