notify 和notifyAll 主要區別

2021-07-02 14:50:43 字數 453 閱讀 8374

notify()和notifyall()都是object物件用於通知處在等待該物件的執行緒的方法。

void notify(): 喚醒乙個正在等待該物件的執行緒。

void notifyall(): 喚醒所有正在等待該物件的執行緒。

兩者的最大區別在於:

notifyall使所有原來在該物件上等待被notify的執行緒統統退出wait的狀態,變成等待該物件上的鎖,一旦該物件被解鎖,他們就會去競爭。

notify他只是選擇乙個wait狀態執行緒進行通知,並使它獲得該物件上的鎖,但不驚動其他同樣在等待被該物件notify的執行緒們,當第乙個執行緒執行完畢以後釋放物件上的鎖,此時如果該物件沒有再次使用notify語句,即便該物件已經空閒,其他wait狀態等待的執行緒由於沒有得到該物件的通知,繼續處在wait狀態,直到這個物件發出乙個notify或notifyall,它們等待的是被notify或notifyall,而不是鎖。

wait 和notify 入門例子

也就是說,wait 會讓出物件鎖,同時,當前執行緒休眠,等待被喚醒,如果不被喚醒,就一直等在那兒。notify 並不會讓當前執行緒休眠,但會喚醒休眠的執行緒。先看第乙個例子!public class threadf catch interruptedexception e system.out.pr...

Java wait和notify結合使用

1 示例 public class testsyncro2 thread t2 new thread new runnable t1.start t2.start class customer catch exception ex this.amount amount system.out.prin...

notify和notifyAll的區別

鎖池entrylist 等待池waitset 鎖池 假設執行緒a已經擁有了某個物件 不是類 的鎖,而其他執行緒b,c想要呼叫這個物件的某個synchronized方法 或者塊 由於b,c執行緒在進入物件的synchronized方法 或者塊 之前就必須先獲得該物件鎖的擁有權,而恰巧該物件的鎖目前正被...