摘要: 前两节你应该掌握了ReentrantLock加锁成功和加锁失败入队的核心逻辑,是如何通过AQS中的3个组件做到的。今天来我们看下: ReentrantLock中,当线程释放锁时的逻辑 释放锁的过程及源码剖析 释放锁的过程及源码剖析 目前经过线程1、线程2使用ReentrantLock.lock()后 阅读全文
posted @ 2021-10-29 21:17 _繁茂 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 上一节,你应该学到了ReentrantLock底层基于AQS的3个小组件 state、owner、queue。并且了解了下一个线程1进行加锁修改owner和state的过程。还记得么?加锁成功后,如下图所示的状态: 首次加锁的时候,只使用到了owner和state这两个小组件,并没有涉及到等待队列。 阅读全文
posted @ 2021-10-29 19:45 _繁茂 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 上一章你应该掌握了Atomic的底层原理-CAS。接下来进入另一个重要的一个知识AQS。我们通过ReentrantLock这个类来讲讲AQS这个知识。 从上图可以看出,ReentractLock、ReadWriteReentractLock,这些锁API底层是基于AQS+CAS+volatile来实 阅读全文
posted @ 2021-10-27 10:02 _繁茂 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 经过volatile和synchronize关键字的底层原理的洗礼,不知道你是否有一种感觉,要想弄明白它们的原理是一个非常难的过程。为什么费这么大的力气要弄明白这些并发基础知识呢? 其实是为了之后更好的掌握并发组件、并发集合这些内容。JDK中的juc(并发包)的知识大体可以分为如下几块: 并发基础中 阅读全文
posted @ 2021-10-23 22:16 _繁茂 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 上一节你了解了什么是CAS、synchronized形成的锁的类型、重量级锁是用户态进程向内核态申请资源加锁过程,HotSpot Java对象结构,以及初步从3个层面分析了下synchronized的核心流程。还记得核心流程图么? 如下所示: 这一节我们仔细来分析下这个过程中,每一步的底层原理。我们 阅读全文
posted @ 2021-10-22 20:48 _繁茂 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 前几节你应该已经了解和掌握了Thread、ThreadLocal、Volatile这几个并发基础知识的底层原理。这一节,你可以跟我一起深入了解下synchronized关键字的底层原理和其涉及的基础知识。看完这篇成长记,你可以获取到如下几点: synchronized预备知识: 理解什么是CAS? 阅读全文
posted @ 2021-10-22 18:15 _繁茂 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 上一节我们基本了解Volatile的作用,从JMM层面简单分析了下volatile可见性的实现要求。发现JMM设定了一些操作要求,在这些要求下,可以保证线程间的可见性。可是具体实现是怎么实现的呢? 但是你要想理解这个实现是比较难的,之前提到按照三个层面给大家讲解。如下图所示: 其实上一节通过JMM分 阅读全文
posted @ 2021-10-22 15:44 _繁茂 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 前几节你应该学习到了Thread和ThreadLocal的底层原理,在接下来的几节中,让我们一起来探索volatile底层原理吧! 不知道你有没有这样的感受:有很多工程师都很难说清楚volatile这个关键字的作用或者原理。比如有的人压根不知道volatile的作用、应用场景;比如有的人也不知道什么 阅读全文
posted @ 2021-10-21 12:12 _繁茂 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 上一节你弄懂了ThreadLocal是什么、它的基本使用方式、get方法的底层原理。这一节让继续深入研究下: ThreadLocal的set源码原理 JVM的中的强引用、弱引用、软引用、虚引用 弱引用在ThreadLocal的应用 ThreadLocal内存泄漏问题分析 ThreadLocal应用场 阅读全文
posted @ 2021-10-21 08:50 _繁茂 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 上一节你应该学习了thread的基本知识和源码原理,熟悉了线程的应用场景。这一节来学习下和Thread相关的一个类,ThreadLocal。 什么是ThreadLocal? 什么是ThreadLocal? 字面意思是线程本地变量的意思。用一句话解释就是:线程本地的变量副本,属于每个线程自己独有的。 阅读全文
posted @ 2021-10-20 23:29 _繁茂 阅读(42) 评论(0) 推荐(0) 编辑