采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好,有个问题想问一下,reentrantLock 实现自AQS,而AQS的内部是一个队列 在公平锁的情况下,队列中的线程都是在队列里了。不公平的情况下,这些线程争抢完锁后如何存放呢。
我的意思是,非公平锁的情况下,没有争抢到锁的线程 也会入队吗? 如果是这样的话,头结点释放了锁,那么队列里面的线程是怎么被唤醒的? 是直接唤醒后继结点吗? 然后争抢到锁的那个线程被拿出来设置为队列的头结点吗?
不会,非公平锁和队列没关系
非公平锁的情况下,没有争抢到锁的线程 也会入队吗? -- 对,非公平与公平的区别就是前者允许抢锁的时候和被唤醒的节点去竞争,后者必须老老实实的排队 如果是这样的话,头结点释放了锁,那么队列里面的线程是怎么被唤醒的? --- 独占模式,是释放了锁的线程去唤醒下一个节点,共享模式是在队列里尝试获取锁成功的节点会立即唤醒下一个节点,形成传播式的唤醒 然后争抢到锁的那个线程被拿出来设置为队列的头结点吗? -- 是的
非公平锁 就是看谁点高,,cas操作嘛,抢到了就执行, 没抢到反回false
登录后可查看更多问答,登录/注册
专为Java工程师打造,并发编程高手养成与高薪面试深度课程
1.3k 6
887 9
926 8
838 7
758 6