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

Java 執行緒基礎:從進程到執行緒,兩種建立方式完整入門

     編輯:Java 相關知識

進程 vs 執行緒

維度進程執行緒
定義執行中的程式,獨立記憶體空間進程內的單一循序控制流
資源獨立堆、棧、檔案描述符共享進程堆/方法區,私有程式計數器、棧、區域變數
建立/切換開銷大(需複製記憶體映像)小(輕量級進程)
通訊IPC(管道、Socket、共享記憶體)直接讀寫共享變數(需同步)

為什麼需要多執行緒?

  • I/O 密集型任務(網路、磁碟、鍵盤)阻塞時,CPU 可切換執行其他執行緒。
  • 多核心 CPU 可真正並行執行多執行緒,提升吞吐量。
  • GUI 應用:事件派發執行緒(EDT)處理介面,背景執行緒處理耗時運算,避免介面凍結。

建立執行緒:方式一、繼承 Thread

class NewThread extends Thread {
    NewThread(String name) { super(name); } // 傳名稱給父類
    public void run() {
        for (int i=10; i>0; i--) {
            System.out.println(getName() + " left: " + i);
            try { Thread.sleep(1000); } catch (InterruptedException e) {}
        }
        System.out.println("Game over!");
    }
}

public class Demo {
    public static void main(String[] args) {
        new NewThread("Thread-Demo").start(); // 必須呼叫 start(),不可直接呼叫 run()
    }
}

關鍵點:覆寫 run()、建構子呼叫 super(name)、用 start() 啟動(非 run())。

建立執行緒:方式二、實作 Runnable(推薦)

class NewTask implements Runnable {
    public void run() { /* 同樣邏輯 */ }
}

public class Demo {
    public static void main(String[] args) {
        Runnable task = new NewTask();
        new Thread(task, "Runnable-Demo").start();
        // 或 Java 8+ Lambda
        new Thread(() -> { /* ... */ }, "Lambda-Demo").start();
    }
}
  • 同一 Runnable 實例可建立多執行緒,共享資料。
  • 避免單一繼承限制,支援執行緒池提交。

主執行緒與 currentThread()

public static void main(String[] args) {
    Thread main = Thread.currentThread(); // 取得主執行緒參考
    main.setName("Main-Thread");
    System.out.println(main.getName() + " started");
    new Thread(() -> System.out.println("Child running")).start();
}
  • JVM 啟動自動建立主執行緒執行 main()。
  • 主執行緒結束不代表程式結束——所有非守護執行緒結束才會退出 JVM。

執行緒命名與除錯

  • 建構子 Thread(String name) 或 setName() 設定名稱。
  • IDE 除錯器、jstack、日誌皆顯示執行緒名稱,善用命名大幅提升除錯效率。

常見新手錯誤

  1. 直接呼叫 t.run() → 單執行緒循序執行,未啟動新執行緒。
  2. run() 死迴圈無終止條件 → 程式無法正常結束。
  3. 忘記處理 InterruptedException → 編譯錯誤或吞掉中斷訊號。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved