Thread 類Runnable 接口 (仍需 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) | 線程組+任務+名字+棧大小 |
Thread 子類實例也可Thread-N (N 為創建序號)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
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