notify和notifyAll的区别

在了解这两个方法之前,先了解两个概念锁池(EntryList)等待池(WaitSet)

锁池

假设线程A已经拥有了某个对象(不是类)的锁,而其他线程B,C想要调用这个对象的某个sychronized方法(或者块),由于B,C线程在进入对象的sychronized方法(或者块)之前必须获得该对象锁的拥有权而恰巧该对象的锁正在被线程A锁占有,此时B,C线程就会被阻塞,进入一个地方去等待锁的释放,这个点便是该对象的锁池,简要理解就是需要获取锁的线程进行等待的地方.

等待池

假设线程A调用了某个对象的wait方法,线程A就会释放对象的锁,同时线程A就进入了该对象的等待池中,进入等待池中的线程不会去竞争该对象的锁

重点:锁池和等待池都是针对对象而言的

notify和notifyAll的区别

  • notifyAll会让所有处于等待池的线程全部进入锁池去竞争锁的机会
  • notify只会随机选取一个等待池的线程进入锁池去竞争获取锁的机会
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、sychronized介绍 并发时,多个线程需要操作同一个资源,容易导致错误数据的产生,为了解决这个问题,当存...
    落地生涯阅读 4,065评论 0 3
  • notify()和notifyAll()的区别? notify():唤醒一个处于等待状态的线程,注意的是在调用此方...
    geaosu阅读 1,631评论 1 0
  • 林炳文Evankaka原创作品。转载自http://blog.csdn.net/evankaka 本文主要讲了ja...
    ccq_inori阅读 741评论 0 4
  • 相关概念 面向对象的三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 多态的好处 允许不同类对...
    东经315度阅读 2,213评论 0 8
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 2,305评论 0 14

友情链接更多精彩内容