1、wait()
讓線程處於凍結狀態,釋放執行權,釋放執行資格。被wait的線程會被存儲到線程池中。
2、notify()
喚醒線程池中的任意一個線程。
3、notifyAll()
喚醒線程池中的所有線程。
- 上述這些方法都需要定義在同步中,且要明確是哪個鎖上的線程。
假設當前鎖爲lock,則上述方法的調用形式是lock.wait(),lock.notify(),lock.notifyAll().
- wait和sleep的區別:
1、wait可以指定時間,也可以不指定。sleep必須指定時間。
2、在同步中,對cpu執行權和鎖的處理不同:
wait:釋放執行權,釋放鎖,被喚醒後纔可以重新獲取執行權。
sleep:釋放執行權,不釋放鎖。過了設置的時間後,會自己醒來,重新獲得執行權。