// 方式一:匿名執行緒,啟動後無引用
new Thread(runnable).start();
// 方式二:持有引用
Thread t = new Thread(runnable);
t.start();
// 後續可操作:t.interrupt(), t.join(), t.isAlive() 等
| 特性 | new Thread(x).start() | Thread t = new Thread(x); t.start() |
|---|---|---|
| 執行緒物件引用 | 無(匿名) | 有(變數 t) |
| 後續控制能力 | 無法中斷、等待、查狀態 | 可呼叫 interrupt()/join()/getState() 等 |
| 適用場景 | 一次性、無需管理的背景任務 | 需監控生命週期、協調關閉的長期任務 |
| 記憶體洩漏風險 | 較低(執行完即可 GC) | 若未妥善關閉引用可能洩漏 |
兩者啟動執行緒的效果完全相同,底層都呼叫 Thread.start() 向 JVM 註冊新執行緒並執行 run()。差異僅在於「是否保留執行緒物件引用以便後續操作」。
new Thread(() -> { ... }).start();(Java 8+ Lambda)Thread 變數,或使用 ExecutorService / CompletableFuture 更高層級抽象。Thread.stop()/suspend()(已棄用),採用 interrupt() + 旗標協作式取消。