notify和notifyAll區別

轉載 http://blog.sina.com.cn/s/blog_4b93170a0102dqws.htmlhtml

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

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

二者的最大區別在於:對象

notifyAll使全部原來在該對象上等待被notify的線程通通退出wait的狀態,變成等待該對象上的鎖,一旦該對象被解鎖,他們就會去競爭。
notify他只是選擇一個wait狀態線程進行通知,並使它得到該對象上的鎖,但不驚動其餘一樣在等待被該對象notify的線程們,當第一個線程運行完畢之後釋放對象上的鎖,此時若是該對象沒有再次使用notify語句,即使該對象已經空閒,其餘wait狀態等待的線程因爲沒有獲得該對象的通知,繼續處在wait狀態,直到這個對象發出一個notify或notifyAll,它們等待的是被notify或notifyAll,而不是鎖。blog

相關文章
相關標籤/搜索