notify()與notifyAll()都是Object對象用於通知處在等待該對象的線程的方法。二者最大的區別在於:線程
notifyAll使全部原來在該對象上等待被notify的線程通通退出wait的狀態,變成等待該對象上的鎖,一旦該對象被解鎖,他們就會去競爭。
notify則文明得多他只是選擇一個wait狀態線程進行通知,並使它得到該對象上的鎖,但不驚動其餘一樣在等待被該對象notify的線程們,當第一個線程運行完畢之後釋放對象上的鎖此時若是該對象沒有再次使用notify語句,則即使該對象已經空閒,其餘wait狀態等待的線程因爲沒有獲得該對象的通知,繼續處在wait狀態,直到這個對象發出一個notify或notifyAll,它們等待的是被notify或notifyAll,而不是鎖。對象
簡單點來講就是,notifyAll()使全部在wait狀態下的線程進入ready狀態,當能夠執行時一塊兒競爭CPU的時間片。而notify()則是隨機使全部處於wait狀態線程的其中之一進入ready狀態,當能夠執行時獲取CPU的時間片,剩下的處於wait狀態的線程仍然處於wait狀態。it