请稍等 ...
×

采纳答案成功!

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

关于公平锁和非公平锁

老师您好,有个问题想问一下,reentrantLock 实现自AQS,而AQS的内部是一个队列 在公平锁的情况下,队列中的线程都是在队列里了。不公平的情况下,这些线程争抢完锁后如何存放呢。

正在回答 回答被采纳积分+3

2回答

提问者 melanch_0001 2018-09-10 17:05:46

我的意思是,非公平锁的情况下,没有争抢到锁的线程 也会入队吗?  如果是这样的话,头结点释放了锁,那么队列里面的线程是怎么被唤醒的? 是直接唤醒后继结点吗? 然后争抢到锁的那个线程被拿出来设置为队列的头结点吗?

0 回复 有任何疑惑可以回复我~
  • 阿神 #1
    不会,非公平锁和队列没关系
    回复 有任何疑惑可以回复我~ 2018-09-10 20:25:09
  • 非公平锁的情况下,没有争抢到锁的线程 也会入队吗?
    -- 对,非公平与公平的区别就是前者允许抢锁的时候和被唤醒的节点去竞争,后者必须老老实实的排队
    
    
    如果是这样的话,头结点释放了锁,那么队列里面的线程是怎么被唤醒的?
    --- 独占模式,是释放了锁的线程去唤醒下一个节点,共享模式是在队列里尝试获取锁成功的节点会立即唤醒下一个节点,形成传播式的唤醒
    
    
    然后争抢到锁的那个线程被拿出来设置为队列的头结点吗?
    -- 是的
    回复 有任何疑惑可以回复我~ 2019-01-21 00:14:15
阿神 2018-09-09 21:19:53

非公平锁 就是看谁点高,,cas操作嘛,抢到了就执行, 没抢到反回false

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