實現
Runnable接口優於繼承Thread類 — 解耦任務邏輯與線程控制,支持多重繼承、線程池提交、Lambda 表達式。
class CounterThread extends Thread {
private final Counter counter;
private final int loops;
public CounterThread(String name, Counter counter, int loops) {
super(name); // 設置線程名
this.counter = counter;
this.loops = loops;
}
@Override public void run() { // 線程執行體
for (int i = 0; i < loops; i++) {
counter.increment();
}
}
}
// 使用
Counter counter = new Counter();
Thread t1 = new CounterThread("T1", counter, 1000);
Thread t2 = new CounterThread("T2", counter, 1000);
t1.start(); t2.start();
Thread,無法繼承業務基類。run() 為 void,需靠共享對象傳結果。class CounterTask implements Runnable {
private final Counter counter;
private final int loops;
public CounterTask(Counter counter, int loops) {
this.counter = counter;
this.loops = loops;
}
@Override public void run() {
for (int i = 0; i < loops; i++) counter.increment();
}
}
// 使用:靈活綁定線程或線程池
Counter counter = new Counter();
Runnable task = new CounterTask(counter, 1000);
new Thread(task, "T1").start();
new Thread(task, "T2").start(); // 同一任務實例可被多線程執行 (需線程安全)
// 或提交線程池
ExecutorService pool = Executors.newFixedThreadPool(2);
pool.submit(task);
pool.shutdown();
Runnable 可提交給多線程/線程池/定時器/CompletableFuture。new Thread(() -> { ... })Callable + Future / CompletableFuture。| 維度 | 繼承 Thread | 實現 Runnable |
|---|---|---|
| 繼承限制 | 單繼承,不可再繼承其他類 | 無限制,可繼承業務基類 |
| 任務復用 | 困難,邏輯綁定線程實例 | 極易,任務對象可多次提交 |
| 線程池兼容 | 不支持 (Thread 不實現 Runnable 接口) | 原生支持 ExecutorService.submit(Runnable) |
| 返回值獲取 | 無 (run 為 void) | 可配合 Callable/Future |
| Lambda 支持 | 無 | 完美支持 |
| 訪問 this | 直接訪問線程對象方法 | 需 Thread.currentThread() |
| 適用場景 | 極簡原型、教學演示、需繼承 Thread 方法 | 所有生產代碼、線程池、異步任務 |
// 方式 1:構造器指定
new Thread(task, "Order-Processor-1").start();
// 方式 2:線程工廠統一命名 (生產推薦)
ThreadFactory factory = new ThreadFactoryBuilder()
.setNameFormat("Order-Processor-%d")
.setDaemon(true)
.build();
ExecutorService pool = Executors.newFixedThreadPool(4, factory);
Java 線程創建的本質是 任務 與 執行載體 的分離。Runnable/Callable 定義「做什麼」,Thread/ExecutorService 決定「怎麼跑」。始終優先實現 Runnable,配合線程池管理線程生命周期,是編寫高併發、可維護 Java 程序的基石。