美文网首页
notify和notifyAll的区别

notify和notifyAll的区别

作者: 叫我胖虎大人 | 来源:发表于2019-08-13 11:25 被阅读0次

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

锁池

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

等待池

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

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

notify和notifyAll的区别

  • notifyAll会让所有处于等待池的线程全部进入锁池去竞争锁的机会
  • notify只会随机选取一个等待池的线程进入锁池去竞争获取锁的机会

相关文章

网友评论

      本文标题:notify和notifyAll的区别

      本文链接:https://www.haomeiwen.com/subject/pprvjctx.html