1、notify()只能唤醒一个wait()的线程, 而notifyAll()可以唤醒多个,今天小编就来聊一聊关于java notify方法?接下来我们就一起去研究一下吧!

java notify方法(java并发编程-notify和notifyAll)

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中使用,过程不释放锁