请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

AQS的一些疑问

先说一下我的理解与疑问吧,我对AQS的理解是这是一个抽象队列式的同步器框架。AQS框架内部维护了一个共享的state变量,过对这个状态的修改来达到同步的目的。具体对状态如何修改,要看继承AQS的具体子类如何实现比如Reentrantlock,CountDownLatch。因为涉及到对共享变量修改,由之前学的可见性知识我猜测这个state变量是volatile的,查了下还真是。然后AQS框架自己做的工作是维护一个线程队列,控制请求资源线程的阻塞与唤醒。

    老师讲AQS有一个CLH队列,这个CLH队列我理解是保存的是请求获取资源的线程队列,如果CLH队列的线程请求资源失败,会对线程信息进行封装,封装成一个Node节点,添加进同步队列。老师说“接着会不断的循环尝试获取锁,条件是当前节点为head的直接后继才会尝试。如果失败就会阻塞自己直到自己被唤醒。而当持有锁的线程释放锁的时候,会唤醒队列中的后继线程。“这儿是CLH队列的直接后继不断尝试获取锁,然后失败阻塞自己封装成Node节点加入同步队列嘛?如果是这样为什么不直接将阻塞的线程直接放在CLH队列的末尾呢?这一块不明白希望老师解答一下

正在回答

2回答

你好,给你找了一篇文章,https://yq.aliyun.com/articles/601071 ,你先看一下,基本上可以解决你所有的疑问

0 回复 有任何疑惑可以回复我~
  • 提问者 慕侠6123171 #1
    厉害了!老师这种资源我自己google没找到啊。我也看了一些博客讲的都云里雾里的。问题自己查找有哪些网站推荐的吗?我以后自己也可以解决问题。
    回复 有任何疑惑可以回复我~ 2018-06-20 17:47:12
  • Jimin 回复 提问者 慕侠6123171 #2
    这个可能是一些搜索习惯吧,我感觉很容易就找到了。。。
    回复 有任何疑惑可以回复我~ 2018-06-20 18:28:12
  • 提问者 慕侠6123171 回复 Jimin #3
    老师今天早上自己梳理回顾了下还是有点迷糊,AQS的CLH队列和sync queue是不是一个队列啊
    回复 有任何疑惑可以回复我~ 2018-06-21 09:18:09
提问者 慕侠6123171 2018-06-20 16:22:45

这儿的CLH队列和sync queue难道是一个队列么。。。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信