ReentrantLock 是如何实现可重入性的?

简介: ReentrantLock 是如何实现可重入性的?

ReentrantLock 内部自定义了同步器sync,在加锁的时候通过CAS算法,将线程对象放到一个双向链表 中,每次获取锁的时候,检查当前维护的那个线程ID和当前请求的线程ID是否 一致,如果一致,同步状 态加1,表示锁被当前线程获取了多次。

源码如下:

finalbooleannonfairTryAcquire(intacquires) {
finalThreadcurrent=Thread.currentThread();
intc=getState();
if (c==0) {
if (compareAndSetState(0, acquires)) {
setExclusiveOwnerThread(current);
returntrue;
         }
    }
elseif (current==getExclusiveOwnerThread()) {
intnextc=c+acquires;
if (nextc<0) // overflowthrownewError("Maximum lock count exceeded");
setState(nextc);
returntrue;
    }
returnfalse;
}
相关文章
|
缓存 Kubernetes Docker
容器服务ACK常见问题之容器服务ACK ingress websocket配置失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
SQL 消息中间件 分布式计算
12中方法,彻底搞定数据倾斜!
12中方法,彻底搞定数据倾斜!
|
Shell Linux Docker
Docker -v 挂载主机目录到容器中(及数据卷容器)
Docker -v 挂载主机目录到容器中(及数据卷容器)
2477 0
|
9月前
|
机器学习/深度学习 人工智能 算法
2025 年,程序员如何找准技术“掘金点”?
大家好,我是V哥。2024年虽已过去,但经济形势依然严峻,市场经济不见好转。然而,新的机遇也在涌现,特别是在科技领域。2025年,人工智能、量子计算、基因编辑和商业航天等前沿技术蓬勃发展,为程序员带来无限可能。AI与机器学习、鸿蒙原生应用开发、物联网等领域前景广阔,值得深入探索。面对挑战,选择关键在于个人兴趣、行业需求和技术潜力。通过不断学习、实践和建立人际网络,程序员们可以在技术浪潮中脱颖而出,书写属于自己的职业华章。关注V哥爱编程,一起决战2025!
539 9
|
10月前
|
缓存 Java 测试技术
分享干货:idea常用快捷键分类总结(适合速查~~建议收藏♥)
本文以分类的形式总结了IDEA常用、好用快捷键,全是干货~
2585 1
分享干货:idea常用快捷键分类总结(适合速查~~建议收藏♥)
|
机器学习/深度学习 存储 算法
【一文了解物联网卡】
【一文了解物联网卡】
1709 3
|
12月前
|
存储 缓存 安全
内存屏障,写屏障和读屏障
本文介绍了Java内存模型(JMM)的关键概念,包括主内存、工作内存、原子性操作、可见性和有序性,并详细解释了写屏障和读屏障的作用,它们是用来确保多线程环境中内存可见性和指令重排序一致性的同步操作。
328 1
|
12月前
|
XML JavaScript Java
BeanFactory 和 FactoryBean的区别
本文介绍了Spring框架中的`BeanFactory`和`FactoryBean`。`BeanFactory`是Spring的核心接口,用于管理Bean的创建、配置及依赖注入。其实现包括`DefaultListableBeanFactory`和已废弃的`XmlBeanFactory`。`FactoryBean`则用于动态创建Bean实例,支持懒加载及AOP代理创建。文章还通过示例展示了如何实现一个`FactoryBean`,并通过测试验证其功能。最后附上了作者信息及版权声明。
411 0
BeanFactory 和 FactoryBean的区别
|
存储 NoSQL 算法
分布式唯一 ID 的 7 种生成方案
在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十分重要的。下面我们一一来列举一下,不一定全部适合,这些解决方案仅供你参考,或许对你有用。
分布式唯一 ID 的 7 种生成方案
|
机器学习/深度学习 传感器 编解码
【多传感器融合】BEVFusion: 激光雷达和摄像头融合框架 NeurIPS 2022
BEVFusion提出一个融合多摄像头和激光雷达数据的框架,可用于3D检测。在自动驾驶领域,通过独立处理并融合摄像头和激光雷达数据,可以显著提升3D对象检测的准确性和稳健性,尤其是在激光雷达可能出现故障的真实场景中。
3520 57
【多传感器融合】BEVFusion: 激光雷达和摄像头融合框架 NeurIPS 2022