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

Java 多線程創建方式一:繼承 Thread 類、八大構造器、start() 與 run() 區別

     編輯:Java 相關知識

兩大創建線程方式

  1. 繼承 Thread 類
  2. 實現 Runnable 接口 (仍需 Thread 實例)

本質:都必須創建 Thread 或子類實例。

Thread 八大構造器

構造器參數說明
Thread()默認
Thread(Runnable target)目標任務
Thread(String name)線程名
Thread(Runnable target, String name)任務+名字
Thread(ThreadGroup group, Runnable target)線程組+任務
Thread(ThreadGroup group, String name)線程組+名字
Thread(ThreadGroup group, Runnable target, String name)線程組+任務+名字
Thread(ThreadGroup group, Runnable target, String name, long stackSize)線程組+任務+名字+棧大小

參數詳解

  • Runnable target:任務對象,Thread 子類實例也可
  • String name:線程名,默認 Thread-N (N 為創建序號)
  • ThreadGroup group:線程組,默認加入主線程組
  • long stackSize:棧大小,通常為 CPU 頁面整數倍 (x86: 4KB,默認 12KB)

繼承 Thread 創建線程示例

public class Thread1 extends Thread {
    public void run() {  // 必須覆寫
        System.out.println(this.getName());
    }
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());  // main
        new Thread1().start();  // Thread-0
        new Thread1().start();  // Thread-1
    }
}

輸出結果

main
Thread-0
Thread-1

關鍵規則

  • 每個 Java 程序至少有一個主線程 (名為 main)
  • 多線程 = 擁有 1+ 線程
  • start() 啟動新線程 → 自動調用 run()
  • 直接調用 run() = 主線程同步執行,非多線程

線程命名最佳實踐

public class Thread2 extends Thread {
    private String who;
    public Thread2(String who) { super(); this.who = who; }
    public Thread2(String who, String name) { super(name); this.who = who; }
    public void run() { System.out.println(who + ":" + getName()); }
    public static void main(String[] args) {
        new Thread2("t1", "MyThread1").start();
        Thread2 t2 = new Thread2("t2"); t2.setName("MyThread2"); t2.start();
        new Thread2("t3").start();  // 默認名
    }
}

輸出分析

t1:MyThread1
t2:MyThread2
t3:Thread-2  // Thread-1 已被 t2 佔用後改名

重要陷阱

  • setName() 在 start() 後調用 → 不確定何時生效,run() 內用名可能讀到舊值
  • start() 不能調用兩次 → 拋出 IllegalThreadStateException
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved