ReentrantLock 原理解析(上)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: ReentrantLock 原理解析

ReentrantLock 源码解析


ReentrantLock 的核心是通过 AQS 实现的,具备了 AQS 的特征。


ReentrantLock 加锁过程


我们先说一下这例子: 以银行办理业务的案例来模拟我们的 AQS 是如何进行线程的管理和通知唤醒机制:


环境:有一个业务窗口 3 个排队的顾客;


类比(对号入座):3 个线程来模拟 3个排队的顾客,然后锁表示银行的窗口。

再来一个直观一点的示意图:


image.png


通过这个例子大家可以进行锁的调试和辅助理解,接下来我就以 ReentrantLock 中具体的方法来分析加锁、解锁过程。


代码例子:


// 以银行办理业务的案例来模拟我们的 AQS 是如何进行线程的管理和通知唤醒机制
// 3 个线程来模拟银行网点,受理窗口办理业务的顾客
// A 顾客就是第一个顾客,此时受理窗口没有任何人, A可以直接去办理
Lock lock = new ReentrantLock();
new Thread(() -> {
    lock.lock();
    System.out.println("  -------> A Thread come in");
    //  暂停几秒钟线程
    try { TimeUnit.MINUTES.sleep(20); } catch (InterruptedException e) {e.printStackTrace();}
    lock.unlock();
}, "A").start();
// 第2个顾客,由于业务窗口只有一个(只能有一个线程持有锁),此时 B进行等待
// 进入候客区
new Thread(() -> {
    lock.lock();
    System.out.println("  -------> B Thread come in");
    try { TimeUnit.MINUTES.sleep(20); } catch (InterruptedException e) {e.printStackTrace();}
    lock.unlock();
}, "B").start();
// 第3个顾客,由于业务窗口只有一个(只能有一个线程持有锁),此时 C进行等待
// 进入候客区
new Thread(() -> {
    lock.lock();
    System.out.println("  -------> C Thread come in");
    try { TimeUnit.MINUTES.sleep(20); } catch (InterruptedException e) {e.printStackTrace();}
    lock.unlock();
}, "C").start();


ReentrantLock 核心方法


ReentrantLock 的方法和结构如下图所示,不得不说 Doug Lea 大神的水平还是非常高的,方法和命名上面其实都是见名知意的。还有就是这块公平锁(FairSync)、非公平锁(NonfairSync)  都是依赖 AbstractQueuedSynchronizer 这个模板方法实现的。


image.png


lock()


是加锁方法,默认为非公平锁。


构造方法如下所示:


image.png


lock 方法如下所示:


image.png


公平锁 lock 方法实现


image.png


相关文章
|
8天前
|
存储 缓存 算法
HashMap深度解析:从原理到实战
HashMap,作为Java集合框架中的一个核心组件,以其高效的键值对存储和检索机制,在软件开发中扮演着举足轻重的角色。作为一名资深的AI工程师,深入理解HashMap的原理、历史、业务场景以及实战应用,对于提升数据处理和算法实现的效率至关重要。本文将通过手绘结构图、流程图,结合Java代码示例,全方位解析HashMap,帮助读者从理论到实践全面掌握这一关键技术。
46 13
|
26天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
59 1
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
56 3
|
2天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
17 1
|
1月前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
47 1
|
27天前
|
存储 供应链 算法
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
52 0
|
1月前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
59 1
|
1月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
57 0
|
2月前
|
数据采集 存储 编解码
一份简明的 Base64 原理解析
Base64 编码器的原理,其实很简单,花一点点时间学会它,你就又消除了一个知识盲点。
90 3
|
1月前
|
API 持续交付 网络架构
深入解析微服务架构:原理、优势与实践
深入解析微服务架构:原理、优势与实践
31 0

推荐镜像

更多