首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Thread 建立方式:繼承 Thread vs 實作 Runnable 差異

     編輯:程式設計疑難解答

兩種寫法對比

方式一:繼承 Thread

new Thread() {
    @Override public void run() {
        super.run(); // 預設空實作
        // 業務邏輯
    }
}.start();

方式二:實作 Runnable(推薦)

new Thread(new Runnable() {
    @Override public void run() {
        // 業務邏輯
    }
}).start();

核心差異

維度繼承 Thread實作 Runnable
繼承限制單一繼承,無法繼承其他類無限制,可繼承其他類
資源共享每個 Thread 實例獨立,難以共享狀態同一 Runnable 實例可傳給多 Thread,易共享數據
線程池相容不支援 ExecutorService 提交完美支援 execute(runnable)
邏輯分離執行緒控制與任務邏輯耦合任務邏輯獨立,符合單一職責

為什麼第一種「有問題」?

原回答提到 start() 內部旗標導致二次調用異常,實際上 Thread.start() 多次調用會拋 IllegalThreadStateException,這與繼承方式無關,而是 Thread 生命週期規定。真正的問題在於設計靈活性。

現代最佳實踐

  • Java 8+:new Thread(() -> { ... }).start();(Lambda 簡化 Runnable)。
  • 生產環境:ExecutorService pool = Executors.newFixedThreadPool(n); pool.submit(() -> ...);。
  • 虛擬執行緒:Java 21+ Thread.startVirtualThread(() -> ...);。

結論:優先使用 Runnable + 執行緒池,避免手動管理 Thread 生命週期。

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