main()。class Runner1 implements Runnable {
public void run() {
for (int i=0; i<10; i++) System.out.println("Runner1: " + i);
}
}
public class TestThread1 {
public static void main(String[] args) {
Runner1 r1 = new Runner1();
Thread t = new Thread(r1); // 包裝為 Thread
t.start(); // 啟動新線程,執行 run()
for (int i=0; i<10; i++) System.out.println("main: " + i);
}
}
優勢:避免單繼承限制,邏輯與線程控制分離。
class Runner2 extends Thread {
public void run() {
for (int i=0; i<=10; i++) System.out.println("Runner2: " + i);
}
}
public class TestThread2 {
public static void main(String[] args) {
new Runner2().start();
for (int i=0; i<=10; i++) System.out.println("main: " + i);
}
}
Thread.sleep(1000); // 靜態方法,當前線程睡眠 1秒,不釋放鎖
// 捕獲 InterruptedException
Thread t = new Thread(() -> { ... });
t.start();
t.join(); // 主線程阻塞,直到 t 結束
// 之後繼續執行主線程代碼
if (i % 2 == 0) Thread.yield(); // 暫停當前線程,重新參與調度
// 不保證下一個獲取 CPU 是誰
sleep:主線程睡 10 秒,子線程每秒打印時間。join:子線程跑完 5 秒,主線程才繼續打印。yield:兩子線程交替輸出,但非強制輪換。| 方法 | 釋放鎖 | 用途 | 拋異常 |
|---|---|---|---|
| sleep | 否 | 延時 | InterruptedException |
| wait | 是 | 條件等待 | InterruptedException |
| join | 否 | 等待線程結束 | InterruptedException |
| yield | 否 | 禮讓 CPU | 無 |
掌握兩種創建方式、三大控制方法(sleep/join/yield)及其語義差異,是 Java 多線程編程的必修基礎。