先来看下await这个方法,这个方法涵盖了阻塞的大部分逻辑,我们通过这个方法入口逐层去揭开conditon.await这个阻塞函数的神秘面纱
lock锁通过condition阻塞的一点理解
lock锁通过condition阻塞的一点理解
跟synchronized锁我们可以进行一个对比,condition.await相当于
object.wait,condition.singal相当于obejct.singal
我们可以想一下这个逻辑 也就是说conditon.await阻塞的时候释放不释放锁,我们常常会跟Thread.sleep有一个对比,Thread.sleep阻塞期间是不释放锁的,而conditon.awati是肯定要释放锁的,如果他不释放锁就不会有别的线程拿到锁,别的线程拿不到锁还怎么唤醒他呢,所以awati肯定是要释放锁的。
所以我们来看一下是怎么释放锁的
这个代码也不难理解,去除当前锁的state不管是几全部释放,这样AQS 中的state又变为了0,也就是成功的释放了锁,其他的线程就可以去争取这个锁了,同样的道理如何当前的AQS中的CLH队列是有节点的那么会唤醒下一个节点,下一个节点会去拿到改锁,如果这点不是很清楚,大家可以看我之前对ReentranLock的理解。
lock锁通过condition阻塞的一点理解

相关文章:

  • 2021-06-16
  • 2022-12-23
  • 2021-09-13
  • 2022-02-19
  • 2021-10-20
  • 2021-10-08
  • 2022-12-23
  • 2021-05-16
猜你喜欢
  • 2021-07-06
  • 2022-12-23
  • 2021-04-11
  • 2021-10-16
  • 2021-08-12
  • 2022-12-23
  • 2021-12-21
相关资源
相似解决方案