java notify方法(java并发编程-notify和notifyAll)
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中使用,过程不释放锁
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com