关于AQS的一点问题

ReentrantLock是组合自定义同步器来实现的,可是同步器的原理是靠同步队列实现的,而同步队列里的那些非head节点竞争锁的时候,都要检查其prev节点是否为head,这样就成了FIFO了,那这个可重入锁的非公平锁(随机获取锁)究竟是如何实现的呢??好奇怪啊,有大佬知道是怎么回事嘛😥😥😥

#Java工程师#
全部评论
跪等大佬
点赞 回复 分享
发布于 2019-08-05 18:40
非公平模式下执行lock方法,线程直接尝试获取同步状态,而不去管同步队列有没有节点在等待,这样就不是严格遵循FIFO了
点赞 回复 分享
发布于 2019-08-05 18:43
公平非公平是在两者tryacquire里不同,公平锁需要先检查同步队列有没有线程在等待,若没有则可以拿到锁,反之要进入队列等待,非公司锁则是竞争锁失败后才进入同步队列
点赞 回复 分享
发布于 2019-08-05 18:44
你看源码噻,非公平锁在创建节点加入同步队列之前会先常识获取锁和进行锁冲入,如果这个时候锁刚好被被释放,那就就可能插队获取到了,,否则被加入队列后,就真的只能fifo了
点赞 回复 分享
发布于 2019-08-05 18:45
我想问的不是tryAcquire方法,而是acquireQueued方法。。。
点赞 回复 分享
发布于 2019-08-05 18:54

相关推荐

练习JAVA时长两年半:qps 30000
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客企业服务