首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 多執行緒入門:從 Thread 繼承到 Runnable 實作的完整範例

     編輯:Java 相關知識

Java 語言內建多執行緒支援,Thread 與 Runnable 是兩大核心 API。本文以最簡單的「雙執行緒交替列印」為例,詳細講解執行緒建立、啟動、生命週期、併發執行特性,並對比兩種實作方式的優劣。

方式一:繼承 Thread 類別

public class TwoThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("New thread: " + i);
        }
    }

    public static void main(String[] args) {
        TwoThread tt = new TwoThread();
        tt.start();              // 啟動新執行緒,進入 run()
        for (int i = 0; i < 10; i++) {
            System.out.println("Main thread: " + i);
        }
    }
}

方式二:實作 Runnable 介面(推薦)

public class Task implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("Runnable task: " + i);
        }
    }

    public static void main(String[] args) {
        Thread t = new Thread(new Task());
        t.start();
        // 主執行緒繼續...
    }
}

核心差異對比

維度extends Threadimplements Runnable
繼承限制單繼承,無法繼承其他類無限制,可繼承其他類
職責分離執行緒控制與任務邏輯耦合任務邏輯獨立,可復用
資源共享較難共享同一任務實例易於多執行緒共享同一 Runnable
適用場景簡單獨立任務、教學演示生產代碼、線程池、併發框架

執行緒生命週期與關鍵方法

  • start():啟動執行緒,**非同步返回**,JVM 排程稍後調用 run()。
  • run():任務邏輯入口,**直接調用不會啟動新執行緒**(變成普通方法呼叫)。
  • sleep(ms):讓出 CPU,進入 TIMED_WAITING,不釋放鎖。
  • join():等待目標執行緒結束。
  • interrupt():中斷阻塞/睡眠執行緒,需配合 Thread.interrupted() 檢查。

併發執行的非確定性

多核 CPU 可真並行;單核透過時間片輪轉模擬並發。**執行緒間指令交織順序不可預測**,共享資料必須同步(synchronized、Lock、volatile、Atomic*)。

現代最佳實踐(Java 8+)

  • 優先使用 ExecutorService 線程池(Executors.newFixedThreadPool、newVirtualThreadPerTaskExecutor (JDK 21))。
  • 任務提交用 CompletableFuture 實現非阻塞鏈式編程。
  • 避免手動管理 Thread 實例,減少資源洩漏風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved