比喻:QQ 客戶端 = 程序;登錄一個 QQ = 進程;發送消息 = 線程。
狀態轉換觸發條件:start()→就緒;調度器選中→運行;sleep/wait/同步鎖→阻塞;阻塞原因消失→就緒;run() 結束/stop()→死亡。
setPriority(int) 修改,但僅為提示,不保證調度順序,受 OS 調度器影響大。class MyThread extends Thread {
@Override
public void run() { /* 任務邏輯 */ }
}
// 使用
new MyThread().start();
class MyTask implements Runnable {
@Override
public void run() { /* 任務邏輯 */ }
}
// 使用
new Thread(new MyTask()).start();
優勢:避免單繼承限制,任務與線程控制解耦,便於線程池提交。
start():啟動線程 (異步),切勿直接調用 run()。sleep(long ms):當前線程休眠,不釋放鎖。yield():讓出 CPU,重新進入就緒隊列。join():等待該線程終止。isAlive():判斷線程是否存活。interrupt():中斷阻塞/休眠線程。public synchronized void method(),鎖對象為 this (實例方法) 或 Class 對象 (靜態方法)。synchronized(lockObj) { ... },精確控制鎖範圍與粒度。class Account {
private int balance = 100;
public synchronized void deposit(int amt) { balance += amt; }
public synchronized void withdraw(int amt) { balance -= amt; }
}
同一時刻只有一個線程能執行同步方法,保證餘額一致性。
private final Object lock = new Object();掌握線程生命週期、創建方式、同步機制是 Java 併發編程基石。實戰中應結合業務場景選擇合適同步策略,善用高級併發工具包 (java.util.concurrent) 提升性能與可維護性。