1、notify()只能唤醒一个wait()的线程, 而notifyAll()可以唤醒多个,今天小编就来聊一聊关于java notify方法?接下来我们就一起去研究一下吧!
java notify方法
notify()和NotifyAll()区别1、notify()只能唤醒一个wait()的线程, 而notifyAll()可以唤醒多个
2、notifyAll()某个特定锁被调用时,只有等待这个锁的线程才能被唤醒。也就是如线程2的notifyAll()不能唤醒线程1的wait()。
例子程序我们看下面的Notify和NotifyAll的例子程序,代码如下:
输出结果:
程序分析:
1、从输出结果我们可以看出,notify()只能唤醒一个wait()的线程,而notifyAll()可以唤醒所有wait()的线程
2、从输出我们可以看到Taks2 的notifyAll()最后才输出,说明Task的notify()或notifyAll() 不能唤醒Task2的线程,原因是Task和Task2都有自己的Blocker 对象,每个Task会在Task.Blocker上阻塞,而每个Task2将会在Task2.Blocker上阻塞,使用的锁不一样,所以不行。
3、通过Timer 定时执行,可以模拟Task的notif()和NotifyAll() ,结果可以一目了然。
4、notify()和notifyAll()必须在synchronized中使用,过程不释放锁