ReentrantLock的底层实现原理

更新时间:2023-06-30 11:11:43 阅读: 评论:0

ReentrantLock的底层实现原理连衣裙款式
ReentrantLock主要利⽤CAS+AQS队列来实现。它⽀持公平锁和⾮公平锁,两者的实现类似。
企业管理创新
divideby>altecoCAS:Compare and Swap,⽐较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则重新获取内存地址V的当前值,并重新计算想要修改的值(重新尝试的过程被称为⾃旋)。修改变量的操作是⼀个原⼦操作,要么完成修改,要么完全没改;CAS被⼴泛的应⽤在Java的底层实现中。在Java中,CAS主要是由sun.misc.Unsafe这个类通过JNI调⽤CPU底层指令实现
AbstractQueuedSynchronizer简称AQS,是⼀个⽤于构建锁和同步容器的框架。事实上concurrent包内许多类都是基于AQS构建,例如ReentrantLock,Semaphore,CountDownLatch,ReentrantReadWriteLock,FutureTask等。AQS解决了在实现同步容器时设计的⼤量细节问题。
AQS使⽤⼀个FIFO的队列表⽰排队等待锁的线程,队列头节点称作“哨兵节点”或者“哑节点”,它不与任何线程关联。其他的节点与等待线程关联,每个节点维护⼀个等待状态waitStatuscan you feel it 非诚勿扰
gl什么意思
getaheadReentrantLock的基本实现可以概括为:先通过CAS尝试获取锁。如果此时已经有线程占据了锁,那就加⼊AQS队列并且被挂起。当锁被释放之后,排在CLH队列队⾸的线程会被唤醒,然后CAS再次尝试获取锁。在这个时候,如果:jealous怎么读
⾮公平锁:如果同时还有另⼀个线程进来尝试获取,那么有可能会让这个线程抢先获取;
visit的现在分词公平锁:如果同时还有另⼀个线程进来尝试获取,当它发现⾃⼰不是在队⾸的话,就会排到队尾,由队⾸的线程获取到锁。
>ason

本文发布于:2023-06-30 11:11:43,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1070082.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   实现   修改   节点
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图