天天看點

java notify notifyAll

notify()和notifyAll()都是Object對象用于通知處在等待該對象的線程的方法。

void notify(): 喚醒一個正在等待該對象的線程。

void notifyAll(): 喚醒所有正在等待該對象的線程。

兩者的最大差別在于:

notifyAll使所有原來在該對象上等待被notify的線程統統退出wait的狀态,變成等待該對象上的鎖,一旦該對象被解鎖,他們就會去競争。

notify他隻是選擇一個wait狀态線程進行通知,并使它獲得該對象上的鎖,但不驚動其他同樣在等待被該對象notify的線程們,當第一個線程運作完畢以後釋放對象上的鎖,此時如果該對象沒有再次使用notify語句,即便該對象已經空閑,其他wait狀态等待的線程由于沒有得到該對象的通知,繼續處在wait狀态,直到這個對象發出一個notify或notifyAll,它們等待的是被notify或notifyAll,而不是鎖。

繼續閱讀