深入ReentrantLock实现原理,源码深度剖析! mikechen的互联网架构()

  本篇文章为你整理了深入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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: