多執行緒程式常用方法:run()、start()、wait()、notify()、notifyAll()、sleep()、yield()、join(),關鍵字 synchronized。
run():執行緒執行體,放入並行邏輯,必須為 public void run()。start():啟動執行緒,由 JVM 自動呼叫 run()。直接呼叫 run() 不會啟動新執行緒,僅在當前執行緒執行。synchronized 保護共享資料。每個物件有一把鎖;執行緒進入同步區塊需獲取鎖,離開時釋放。
// 情況 1:不同物件,synchronized 無效
Runnable r1 = new ThreadTest();
Runnable r2 = new ThreadTest();
Thread t1 = new Thread(r1), t2 = new Thread(r2); // 兩把鎖,並發執行
// 情況 2:同一物件,synchronized 生效
Runnable r = new ThreadTest();
Thread t1 = new Thread(r), t2 = new Thread(r); // 共用一把鎖,串行執行
使用 synchronized(this) { ... } 僅同步必要程式碼區塊,提升並發度。
InterruptedException。Object 方法,**必須在同步區塊內呼叫**。wait():釋放鎖,進入等待集合。notify():喚醒一個等待執行緒;notifyAll():喚醒全部。yield():暗示排程器讓出 CPU,不保證切換,不釋放鎖。join():等待目標執行緒結束,常用於主執行緒等待子執行緒完成。java.util.concurrent 套件(Lock、Condition、Concurrent 集合)替代低階同步。sleep()。InterruptedException,保留中斷狀態。