本篇文章为你整理了深入ReentrantLock实现原理,源码深度剖析! – mikechen的互联网架构()的详细内容,包含有 深入ReentrantLock实现原理,源码深度剖析! – mikechen的互联网架构,希望能帮助你了解 深入ReentrantLock实现原理,源码深度剖析! – mikechen的互联网架构。
系统掌握 Java 多线程和并发编程的技术原理和知识点,写出优秀的并发代码
熟练应用各种并发工具,了解在什么情况下使用哪些具体的技术和方法
分掌握常见的多线程和并发问题分析技巧,知道排查一般问题的具体步骤
构建完整全面的并发编程知识体系,以及常见的面试问题和技巧
精通Java并发编程,彻底掌握 Java 并发编程知识。
详细内容
操作系统的发展历程
多线程、纤程、协程
硬件内存架构
并发和并行
CPU和高速缓存
缓存一致性
指令重排
支撑Java内存模型原理
Volatile的实现源码剖析
内存屏障
经典的单例的双重检测源码剖析
AQS的设计和结构
AQS源码深度剖析
线程通信与状态流转
Synchronized的实现原理及应用
Synchronized锁的膨胀升级过程分析
乐观锁、悲观锁、重入锁、公平锁、非公平锁及锁的粒度详解
ReentrantLock源码深度剖析与实战
可重入锁原理、获取锁和释放锁
ReentrantReadWriteLock源码深度剖析与实战
Condition 条件队列
线程池核心原理
线程池核心参数、拒绝策略、任务流程详解
线程池ThreadPollExecutor
阻塞与非阻塞队列详解
CountDownLatch源码深度剖析与实战
Semaphore源码深度剖析与实战
CyclicBarrier源码深度剖析与实战
ArrayBlockingQueue源码深度剖析
ConcurrentLinkedQueue 源码深度剖析
PriorityBlockingQueue 源码深度剖析
并发Atomic原子
死锁解决方案
CAS算法乐观锁
CAS的ABA问题
ThreadlLocal源码深度解析
ThreadlLocal数据隔离
ThreadlLocal内存溢出
ForkJoin原理解析
ConcurrentHashMap JDK1.8源码剖析
ArrayList、LinkedList、CopyOnWriteArrayList的实现原理
阻塞队列的实现原理与应用
非阻塞队列的实现原理与应用
ConcurrentLinkedQueue源码深度剖析
ArrayBlockingQueue源码深度剖析
深入LinkedBlockingQueue实现原理
反射泛型
从 0 掌握消息队列(MQ)的关键技术,了解核心知识
全面了解各类 MQ 技术的原理和特性,洞悉相关原理
深入理解 MQ 的特点和应用场景
掌握RabbitMQ RocketMQ Kafaka架构设计
全面吃透RocketMQ的源码底层实现
详细内容
消息队列的设计
消息队列的核心组成
消息队列的传输模式
消息队列的消费模式
消息队列的消息协议
消息队列的发送方式
消息队列的应用
异步调用的实现原理
应用解耦的实现原理
削峰填谷的实现原理
消息队列的架构与选型
Kafka的核心架构设计
RabbitMQ的核心架构设计
RocketMQ的核心架构设计
主流消息队列的选型与优劣比较
如何设计一个消息队列
消息队列的整体架构
消息队列的核心流程
消息队列传输过程
消息队列如何数据存储
消息队列如何做消息消费
同步异步编程
同步编程的实现
异步编程的实现
Future的源码剖析
同步、异步源码案例讲解
RocketMQ零拷贝
RocketMQ Mmap的实现
PageCache
Mmap的底层实现原理
虚拟内存
缺页中断
RocketMQ源码深度剖析
RocketMQ异步通信
RocketMQ核心存储
RocketMQ消费队列
精通分布式事务并对其原 理有深入理解
精通分布式锁、Session、全局唯一ID等并对其原 理有深入理解
掌握分布式数据库并对原理有深入理解
全面了解分布式的协议
全面了解分布式存储方案
详细内容
微服务架构变迁史
淘宝分布式架构演变过程
分布式协议
一致性模型
Gossip协议
Paxos协议
Raft协议
Zab协议
分布式Session解决方案
session
分布式session
分布式session方案
Session复制
Session存储在Cookie
Session粘性管理
Session集中管理在后端
分布式Session方案优劣势比较
分布式事务解决方案
分布式事务
BASE
一致性模型
XA两阶段
事务补偿TCC
消息队列最终一致性
分布式锁解决方案
分布式锁的由来
分布式锁的特点
分布式锁解决方案
数据库分布式锁
Redis分布式锁
Zookeeper分布式锁
分布式锁解决方案优劣势比较
分布式全局唯一ID
分布式全局唯一ID的要求
分布式全局唯一ID的方案
分布式全局唯一ID方案的优劣势比较
Snowflake雪花算法详解
大厂分布式全局唯一ID方案
分布式关系SQL数据库解决方案
SQL - NoSQL- NewSQL发展轨迹
MySQL+分库分表
Spanner
Aurora
NewSQL新型分布式数据库比较
分布式NoSQL数据库解决方案
NoSQL的三大基石
列式数据
文档数据库
图形数据库
内存键值数据库
主流NoSQL数据库比较
分布式文件存储解决方案
FastDFS
MogileFS
MooserFS
GlusterFS
Ceph
14:亿级高性能架构设计
ReentrantLock是java中非常重要的一个并发工具,想掌握好ReentrantLock,首选需要掌握好AQS,AQS是Java并发包中众多同步组件的构建基石。
接下来我将详解ReentrantLock的核心实现,我将从ReentrantLock成员结构,再到详细的锁获取细节来详解ReentrantLock,文末有ReentrantLock的大厂面试必考题作业。
为了助大家掌握好ReentrantLock,本节课我重点会讲解以下6点:
1.AQS
2.ReentrantLock简介
3.ReentrantLock的主要成员和结构图
4.ReentrantLock的基本使用
5.ReentrantLock的实现原理
6.ReentrantLock锁源码剖析
目录
AQSReentrantLock简介ReentrantLock的主要成员和结构图
AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下locks包内的一个类,它实现了一个FIFO(FirstIn、FisrtOut先进先出)的队列,底层实现的数据结构是一个双向链表。
AQS定义了一套多线程访问共享资源的同步器框架,在Lock包许多同步类实现都依赖于它,如常用的:
锁(ReentrantLock)
门阀(CountDownLatch)
信号量(Semaphor)
读写锁(ReadWriteLock)
这些类里面都维护了一套AQS的子类,都是基于AQS来构建。
所以你想掌握好ReentrantLock,你首先需要打好AQS的基础。详细的AQS介绍(点击查看)。
ReentrantLock简介
ReentrantLock重入锁,顾名思义,就是支持重入的锁,它表示能够支持一个线程对资源的重复加锁, 是一个基于AQS( )并发框架的并发控制类。
我们之前学习过Synchronized锁,它也是支持重入的一种锁,参考:Java并发编程系列:深入详解Synchronized同步锁的底层实现
ReentrantLock的主要成员和结构图
3个问题,都谈到了核心点,继续保持下去,作业输出前用语言来表述,这样的反复训练,学东西会越来越快,因为很简单,直接抓重点学,其实表述的过程就是练习抓重点的过程。后面第3个图:因为经常会问到公平锁与非公平锁的区别,还可以再补充下这个点。
我这边也在想后续把你们的作业输出集结成册,方便大家看自己的成长记录与学习心得,加油,路正银,后面你会越来越厉害 ✗咧嘴笑✗ ✗拳头✗
问题1、ReentrantLock重入锁,它能够支持一个线程对资源的重复加锁,是一个基于AQS并发框架的并发控制类。
ReentrantLock的锁主要是以资源state为状态描述,利用CAS实现对锁资源的抢占,并通过一个CLH队列阻塞所有的竞争线程。
问题2、公平锁的实现是在抢占锁之前先去判断当前线程之前有没有前置等待的线程
可重入的实现方式是,独占线程和当前线程是同一线程时,state的值+1,线程可以不停的lock来增加state的值,对应的需要unlock来解锁,直到state为零
问题3
reentrantlock 底层基于AQS,可重入,支持非公平和公平两种模式,默认非公平。
公平锁是通过把在进行CAS之前,先判断AQS队列中有没有线程,如果没有才会进行CAS来实现的。
可重入,是通过对状态变量state进行操作来实现,如果同一个线程多次进入,会对state变量多次加1,释放锁,则会减一,直到为0才释放锁。
流程图后面再补(现在不方便):
ReentrantLock是jdk提供的可重入锁,跟synchronized一样,也是为了保证在同一时刻只有一个线程能进入被锁的代码块,从而保证原子性。
ReentrantLock是基于AQS实现的锁,通过state来标记锁的状态,使用CLH队列来实现线程等待。当线程获取锁的时候,获取成功则执行代码,如果获取锁失败则会将当前线程组装到一个Node节点中,然后添加到CLH队尾。
ReentrantLock的公平锁和非公平锁的区别就是在获取锁的时候,公平锁会判定节点的前面是否还有在等待的线程节点,如果没有再进行CAS操作获取锁;而非公平锁则不会判断前面是否有等待节点直接进行CAS操作。
ReentrantLock的可重入实现是在获取锁的时候,如果发现锁的状态是有锁,则判断当前锁的线程是否和当前线程是同一线程,如果是,则将state+1,当前线程获得锁成功。同理,在解锁时,必须要state=0才解锁成功。
以上就是深入ReentrantLock实现原理,源码深度剖析! – mikechen的互联网架构()的详细内容,想要了解更多 深入ReentrantLock实现原理,源码深度剖析! – mikechen的互联网架构的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。