wait()、notify()方法屬於Object中的方法;對於Object中的方法,每個對象都擁有。
wait()方法:該方法用來使得當前線程進入等待狀態,直到接到通知或者被中斷打斷為止。在調用wait()方法之前,線程必須要獲得該對象的對象級鎖;換句話說就是該方法只能在同步方法或者同步塊中調用,如果沒有持有合適的鎖的話,線程將會拋出異常IllegalArgumentException。調用wait()方法之后,當前線程則釋放鎖。
notify()方法:該方法用來喚醒處於等待狀態獲取對象鎖的其他線程。如果有多個線程則線程規划器任意選出一個線程進行喚醒,使其去競爭獲取對象鎖,但線程並不會馬上就釋放該對象鎖,wait()所在的線程也不能馬上獲取該對象鎖,要程序退出同步塊或者同步方法之后,當前線程才會釋放鎖,wait()所在的線程才可以獲取該對象鎖。
wait()方法是釋放鎖的;notify()方法不釋放鎖,必須等到所在線程把代碼執行完。