首页 > 其他 > 详细

AQS原理解析 AbstractQueuedSynchronizer

时间:2019-09-30 18:30:07      阅读:77      评论:0      收藏:0      [点我收藏+]

 

2018.08.29 13:49:42字数 478阅读 155

AQS核心思想

如果被请求的共享资源空闲,则将当前请求线程设置为有效的工作线程,并将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及唤醒机制,这个机制是用CLH队列来实现的,将暂时获取不到锁的线程加入到队列中

 

 
技术分享图片
CLH队列

AQS共享资源

AQS维护了一个volatile int state(共享资源)和一个CLH队列;其中state的访问方式有三种:

  • getstate()
  • setState()
  • compareAndSetState()
    AQS定义了两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可以同时执行,如CountDownLatch)

AQS同步器

  • isHeldExclusively():线程是否正在独占资源
  • tryAcquire():独占方式,尝试获取资源
  • tryRelease():独占方式,尝试释放资源
  • tryAcquireShared():共享方式,尝试获取资源
  • tryReleaseShared():共享方式,尝试释放资源

举一个CoundDownLatch实现过程的例子,任务分为N个子线程去执行,state也初始化为N,每个子线程执行完成之后countDown()一次,state会在CAS操作下减一,当state减为零之后unpark(唤醒)主调用线程

读锁与写锁(独占与共享)的实现

CLH队列中的节点的模式是EXCLUSIVE和SHARED模式,当一个线程成功修改了state状态,表示获取了锁,如果线程所在的节点为SHARED模式,将开始一个读锁传递的过程,从头结点,向队列后续节点传递唤醒,直到队列结束或者遇到了EXCLUSIVE模式的节点,等待所有激活的读操作完成,然后进入到EXCLUSIVE模式

AQS原理解析 AbstractQueuedSynchronizer

原文:https://www.cnblogs.com/kelelipeng/p/11613674.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!