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

Java 多執行緒程式設計入門:Thread 與 Runnable 兩種實作方式完整教學

     編輯:Java 相關知識

什麼是多執行緒?

多執行緒讓程式同時執行多個任務,提升 CPU 利用率與回應性。Java 內建支援,是語言核心特色之一。

單執行緒 vs 多執行緒

  • 單執行緒:循序執行,阻塞操作(I/O、睡眠)導致整個程式停滯。
  • 多執行緒:任務分派給不同執行緒並行,阻塞不影響其他任務。

兩種實作執行緒的方式

方式一:繼承 Thread 類別

public class PrintThread extends Thread {
    private int count = 0;

    @Override
    public void run() {
        for (;;) {
            System.out.println(++count + ": Thread");
            try { Thread.sleep(100); } catch (InterruptedException ignored) {}
        }
    }

    public static void main(String[] args) {
        PrintThread t = new PrintThread();
        t.start(); // 啟動新執行緒,呼叫 run()
        
        // 主執行緒繼續執行
        for (;;) {
            System.out.println("Main");
            try { Thread.sleep(100); } catch (InterruptedException ignored) {}
        }
    }
}

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

public class PrintRunnable implements Runnable {
    @Override
    public void run() {
        for (;;) System.out.println("T");
    }

    public static void main(String[] args) {
        Thread t = new Thread(new PrintRunnable());
        t.start();
        
        for (;;) System.out.println("M");
    }
}

核心差異比較

特性extends Threadimplements Runnable
繼承限制單一繼承,無法繼承其他類別無限制,可繼承其他類別
職責分離執行緒控制與任務邏輯耦合任務邏輯與執行緒控制分離
資源共享較難共享同一任務實例易共享:new Thread(runnable) 多次
執行緒池相容不直接支援完美支援 ExecutorService
Lambda 友善否是:() -> { ... }

執行緒生命週期

NEW → RUNNABLE → RUNNING → BLOCKED/WAITING/TIMED_WAITING → TERMINATED
  • start():從 NEW 轉 RUNNABLE,JVM 排程執行 run()。
  • 直接呼叫 run():不會啟動新執行緒,只是在當前執行緒執行方法。
  • sleep():讓出 CPU,進入 TIMED_WAITING。
  • join():等待目標執行緒結束。
  • wait()/notify():Object 監視器協調(需在 synchronized 區塊)。

執行緒優先級

  • 範圍:1 (MIN_PRIORITY) ~ 10 (MAX_PRIORITY),預設 5 (NORM_PRIORITY)。
  • setPriority(int) / getPriority()。
  • 注意:優先級只是提示,排程器不保證嚴格遵守。

執行緒群組

ThreadGroup group = new ThreadGroup("MyGroup");
Thread t1 = new Thread(group, task, "Worker-1");
Thread t2 = new Thread(group, task, "Worker-2");
group.list(); // 列印群組結構

常見管理方法(Thread 類別)

方法說明
start()啟動執行緒
sleep(ms)靜態方法,讓當前執行緒睡眠
yield()讓出 CPU,重新排程
join()等待執行緒結束
interrupt()中斷執行緒(設定中斷旗標)
isAlive()檢查是否存活
setDaemon(true)設為守護執行緒(JVM 結束不等待)

最佳實務建議

  1. 優先用 Runnable + ExecutorService(執行緒池),避免手動管理 Thread。
  2. 任務邏輯與執行緒控制分離,便於測試與重用。
  3. 共享資料用 volatile、Atomic*、synchronized 或並發集合。
  4. 避免使用 stop()、suspend()、resume()(已淘汰,不安全)。
  5. 妥善處理 InterruptedException,保留中斷狀態:Thread.currentThread().interrupt()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved