當一個線程進入wait之后,就必須等其他線程notify/notifyall,使用notifyall,可以喚醒
所有處于wait狀態的線程,使其重新進入鎖的爭奪隊列中,而notify只能喚醒一個。注意,任何時候只有一個線程可以獲得鎖,也就是說只有一個線程可以運行synchronized 中的代碼,notifyall只是讓處于wait的線程重新擁有鎖的爭奪權,但是只會有一個獲得鎖并執行。
那么notify和notifyall在效果上又什么實質區別呢?
主要的效果區別是notify用得不好容易導致死鎖,例如下面提到的例子。
更多詳細的介紹可以參看:
http://stackoverflow.com/questions/37026/java-notify-vs-notifyall-all-over-again
新聞熱點
疑難解答