new Thread(new Runnable() {
@Override
public void run() {
System.out.println("透過 Runnable 建立線程");
}
}).start();
new Thread() {
@Override
public void run() {
System.out.println("繼承 Thread 建立線程");
}
}.start();
public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
boolean started = false;
try {
start0(); // ★ 關鍵:呼叫 native 方法啟動線程
started = true;
} finally {
if (!started) {
group.threadStartFailed(this);
}
}
}
start0() 是 native 方法,由 JVM 底層實作,真正建立作業系統層級線程並安排執行。
public void run() {
if (target != null) { // target 為建構子傳入的 Runnable 物件
target.run();
}
}
| 方法 | 呼叫者 | 執行線程 | 用途 |
|---|---|---|---|
start() | 主線程 (或任意線程) | 新建立的線程 | 啟動新線程,由 JVM 排程執行 run() |
run() | 任意線程 | 呼叫者所在線程 | 單純方法呼叫,不建立新線程 |
Thread t = new Thread(() -> System.out.println("執行中"));
t.run(); // 錯誤!在主線程中同步執行,未建立新線程
Thread t = new Thread(() -> System.out.println("執行中"));
t.start(); // 正確!建立新線程並非同步執行
start() → JVM 呼叫子類別的 run()start() → Thread 預設 run() → 呼叫 target.run() (即 Runnable 實作)new Thread(runnable, "訂單處理線程") 便於除錯與監控ExecutorService