码迷,mamicode.com
首页 > 其他好文 > 详细

AQS

时间:2020-06-17 20:00:10      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:模板方法   判断   直接   进入   可见   非公平锁   链表实现   表示   cas   

什么是AQS

  • ReentrantLock的底层实现
  • 支持尝试获取锁
  • 支持重入
  • 支持打断
  • 支持多条件
  • 支持公平锁和非公平锁
  • 支持共享锁和排他锁

怎么做到的

  • 使用了模板方法实现tryAcquire
  • 子类Sync实现
  • 通过CAS操作state的值,state为volatile修饰,线程可见
  • state为0表示锁未被占用,为1表示被占用,大于1表示重入的次数
  • 内部使用双向链表实现同步等待队列
  • 非公平锁会先尝试获取锁,失败则进入等待队列尾部
  • 公平锁直接加入队列尾部
  • 加入等待队列的节点判断前置节点状态来决定是否尝试获取锁:如果前置节点为head则尝试

AQS

标签:模板方法   判断   直接   进入   可见   非公平锁   链表实现   表示   cas   

原文地址:https://www.cnblogs.com/wod-Y/p/13154177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!