public class MyThread extends Thread {
@Override
public void run() {
// 線程執行邏輯
}
}
// 使用
new MyThread().start();
public class MyTask implements Runnable {
@Override
public void run() {
// 任務邏輯
}
}
// 使用
new Thread(new MyTask()).start();
// 或線程池
executor.submit(new MyTask());
優勢:避免單繼承限制,任務與線程控制解耦,方便線程池復用。

| 狀態 | 說明 | 觸發條件 |
|---|---|---|
| NEW | 新建 | Thread 對象創建,未調用 start() |
| RUNNABLE | 可運行 | 調用 start(),等待 CPU 調度 |
| BLOCKED | 阻塞 | 等待獲取 synchronized 鎖 |
| WAITING | 無限等待 | Object.wait()、Thread.join()、LockSupport.park() |
| TIMED_WAITING | 限時等待 | Thread.sleep()、wait(timeout)、join(timeout) |
| TERMINATED | 終止 | run() 正常結束或拋出未捕獲異常 |
synchronized 同步塊/方法 → 獲取鎖成功 → RUNNABLEobj.wait() 釋放鎖進入 WAITINGobj.notify()/notifyAll() 喚醒重新競爭鎖 → BLOCKED → RUNNABLEthread.join() 等待目標線程終止Thread.sleep(ms)、obj.wait(ms)、thread.join(ms)interrupt() 中斷 → 拋出 InterruptedException → RUNNABLE| 方法 | 作用 | 注意事項 |
|---|---|---|
| start() | 啟動線程 | 只能調用一次,二次調用拋 IllegalThreadStateException |
| run() | 執行邏輯 | 直接調用不會新建線程,僅普通方法調用 |
| sleep() | 靜態方法,讓當前線程休眠 | 不釋放鎖,需捕獲 InterruptedException |
| yield() | 禮讓 CPU | 不保證調度,僅提示調度器 |
| join() | 等待線程終止 | 本質調用 wait(),可被中斷 |
| interrupt() | 中斷線程 | 設置中斷標誌,不會強制終止,需代碼配合檢查 |
| isInterrupted() | 檢查中斷標誌 | 不清除標誌 |
| interrupted() | 靜態檢查並清除標誌 | 僅當前線程可用 |