void notify().net
wait、notify和notifyAll方法是Object類的final native方法。因此這些方法不能被子類重寫blog
解除全部那些在該對象上調用wait方法的線程的阻塞狀態。該方法只能在同步方法或同步塊內部調用。若是當前線程不是鎖的持有者,該方法拋出一個IllegalMonitorStateException異常。ci
隨機選擇一個在該對象上調用wait方法的線程,解除其阻塞狀態。該方法只能在同步方法或同步塊內部調用。若是當前線程不是鎖的持有者,該方法拋出一個IllegalMonitorStateException異常。get
致使線程進入等待狀態,直到它被其餘線程經過notify()或者notifyAll喚醒。該方法只能在同步方法中調用。若是當前線程不是鎖的持有者,該方法拋出一個IllegalMonitorStateException異常。同步
致使線程進入等待狀態直到它被通知或者通過指定的時間。這些方法只能在同步方法中調用。若是當前線程不是鎖的持有者,該方法拋出一個IllegalMonitorStateException異常。it
Object.wait()和Object.notify()和Object.notifyall()必須寫在synchronized方法內部或者synchronized塊內部,這是由於:io
這幾個方法要求當前正在運行object.wait()方法的線程擁有object的對象鎖。
即便你確實知道當前上下文線程確實擁有了對象鎖,也不能將object.wait()這樣的語句寫在當前上下文中。