![](https://img-blog.csdnimg.cn/20200613111933546.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JDK源码笔记
记录工作学习中常用的一些JDK源码学习笔记。
程序员小航
这个作者很懒,什么都没留下…
展开
-
线程池 ThreadPoolExecutor 原理及源码笔记
前言"前面在学习 JUC 源码时,很多代码举例中都使用了线程池 ThreadPoolExecutor ,并且在工作中也经常用到线程池,所以现在就一步一步看看,线程池的源码,...原创 2020-11-15 19:10:40 · 152 阅读 · 0 评论 -
写时复制集合 —— CopyOnWriteArrayList 源码原理阅读笔记
前言JUC 下面还有一个系列的类,都是 CopyOnWriteXXX ,意思是写时复制,这个究竟是怎么回事?那就以 CopyOnWriteArrayList 为切入点,一起了解写时复制是怎么回事?公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍ArrayList 的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的。像名字一样,每次进行操作的时候,都会进行一次复制,.原创 2020-10-31 10:44:48 · 211 阅读 · 0 评论 -
AQS 都看完了,Condition 原理可不能少!
前言在介绍 AQS 时,其中有一个内部类叫做 ConditionObject,当时并没有进行介绍,并且在后续阅读源码时,会发现很多地方用到了 Condition ,这时就会很诧异,这个 Condition 到底有什么作用?那今天就通过阅读 Condition 源码,从而弄清楚 Condition 到底是做什么的?当然阅读这篇文章的时候希望你已经阅读了 AQS、ReentrantLock 以及 LockSupport 的相关文章或者有一定的了解(当然小伙伴也可以直接跳到文末看总结)。公众号:liuz.原创 2020-10-01 20:20:30 · 380 阅读 · 3 评论 -
基于数组的有界阻塞队列 —— ArrayBlockingQueue
前言在阅读完和 AQS 相关的锁以及同步辅助器之后,来一起阅读 JUC 下的和队列相关的源码。先从第一个开始:ArrayBlockingQueue。公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍由数组支持的有界BlockingQueue阻塞队列。这个队列的命令元素FIFO(先入先出)。 队列的头是元素一直在队列中时间最长。 队列的尾部是该元素已经在队列中的时间最短。 新元素插入到队列的尾部,并且队列检索操作获取在队.原创 2020-09-28 10:41:38 · 190 阅读 · 0 评论 -
CyclicBarrier 不就是比 CountDownLatch 多了个回环么?
前言看完 CountDownLatch 正准备表示一番,突然看到了一个 CyclicBarrier —— 回环屏障。沃特?回环还屏障?说比 CountDownLatch 要多一个回环,那咱可得瞧一瞧,看一看了!公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍一个同步辅助,它允许一组线程的所有等待彼此达成共同屏障点。CyclicBarrier 在涉及固定线程数且必须等待彼此的程序非常有用。该屏障被称为回环屏障 ,因为.原创 2020-09-14 08:12:42 · 135 阅读 · 0 评论 -
快来看看!AQS 和 CountDownLatch 有怎么样的关系?
前言CountDownLatch 一个同步辅助工具,同样是基于 AQS 实现,本篇文件主要是介绍 CountDownLatch 的使用,以及源码。公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍一个同步辅助工具,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止一个 CountDownLatch 初始化为给定计数。 在 await 方法阻塞,调用 countDown 方法会减少计数直到达到零,此后所有等待.原创 2020-09-07 17:09:20 · 298 阅读 · 0 评论 -
除了读写锁,JUC 下面还有个 StampedLock!还不过来了解一下么?
前言在了解完 ReentrantLock 和 ReentrantReadWriteLock 之后,惊奇的发现 JUC 下还有一个 StampedLock 。 查阅资料发现是 JDK8 新增的一个锁。现在已经 JDK15 了,原谅我的孤陋寡闻,实在是业务开发中用的太少。那行吧,赶紧来看一下 StampedLock 到底是什么?为什么有了 ReentrantLock 和 ReentrantReadWriteLock 之后还要设计一个 StampedLock ?公众号:liuzhihangs,记录工作学.原创 2020-08-09 15:58:05 · 139 阅读 · 0 评论 -
快进来!花几分钟看一下 ReentrantReadWriteLock 的原理!
快进来!花几分钟看一下 ReentrantReadWriteLock 的原理!前言在看完 ReentrantLock 之后,在高并发场景下 ReentrantLock 已经足够使用,但是因为 ReentrantLock 是独占锁,同时只有一个线程可以获取该锁,而很多应用场景都是读多写少,这时候使用 ReentrantLock 就不太合适了。读多写少的场景该如何使用?在 JUC 包下同样提供了读写锁 ReentrantReadWriteLock 来应对读多写少的场景。公众号:liuzhihangs原创 2020-07-28 11:35:12 · 407 阅读 · 2 评论 -
不能再被问住了!ReentrantLock 源码、画图一起看一看!
前言在阅读完 JUC 包下的 AQS 源码之后,其中有很多疑问,最大的疑问就是 state 究竟是什么含义?并且 AQS 主要定义了队列的出入,但是获取资源、释放资源都是交给子类实现的,那子类是怎么实现的呢?下面开始了解 ReentrantLock。公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍一个可重入的互斥锁与隐式监视器锁synchronized具有相同的基本行为和语义,但功能更强大。具有以下特征:互斥性:.原创 2020-07-26 00:26:44 · 185 阅读 · 0 评论 -
别走!这里有个笔记:图文讲解 AQS ,一起看看 AQS 的源码……(图文较长)
前言AbstractQueuedSynchronizer 抽象队列同步器,简称 AQS 。是在 JUC 包下面一个非常重要的基础组件,JUC 包下面的并发锁 ReentrantLock CountDownLatch 等都是基于 AQS 实现的。所以想进一步研究锁的底层原理,非常有必要先了解 AQS 的原理。公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍先看下 AQS 的类图结构,以及源码注释,有一定的大概了解之后再从.原创 2020-07-12 15:29:54 · 381 阅读 · 0 评论 -
JUC 包下工具类,它的名字叫 LockSupport !你造么?
前言LockSupport 是 JUC 中常用的一个工具类,主要作用是挂起和唤醒线程。在阅读 JUC 源码中经常看到,所以很有必要了解一下。公众号:liuzhihangs ,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍基本线程阻塞原语创建锁和其他同步类。Basic thread blocking primitives for creating locks and other synchronization classes.LockSupp.原创 2020-07-05 21:19:59 · 144 阅读 · 0 评论 -
JDK 8 新增的 LongAdder,得过来看一下!
前言在介绍 AtomicInteger 时,已经说明在高并发下大量线程去竞争更新同一个原子变量时,因为只有一个线程能够更新成功,其他的线程在竞争失败后,只能一直循环,不断的进行 CAS 尝试,从而浪费了 CPU 资源。而在 JDK 8 中新增了 LongAdder 用来解决高并发下变量的原子操作。下面同样通过阅读源码来了解 LongAdder 。公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍一个或多个变量共同维持初值.原创 2020-06-29 17:12:09 · 185 阅读 · 0 评论 -
请介绍下你了解的ThreadLocal,它的底层原理!@#¥%& ......
前言业务开发中经常使用 ThreadLocal 来存储用户信息等线程私有对象… ThreadLocal 内部构造是什么样子的?为什么可以线程私有?常说的内存泄露又是怎么回事?公众号:liuzhihangs ,记录工作学习中的技术、开发及源码笔记;时不时分享一些生活中的见闻感悟。欢迎大佬来指导!介绍ThreadLocal 类提供了线程局部变量。和正常对象不同的是,每个线程都可以访问 get()、set() 方法,获取独属于自己的副本。 ThreadLocal 实例通常是类中的私有静态字段,并.原创 2020-06-21 11:56:34 · 180 阅读 · 0 评论 -
从JUC源码看CAS,我做了个笔记 ......
前言JUC包下大量使用了CAS,工作和面试中也经常遇到CAS,包括说到乐观锁,也不可避免的想起CAS,那CAS究竟是什么?概念说到CAS,基本上都会想到乐观锁、AtomicInteger、Unsafe …当然也有可能啥也没想到!不管你们怎么想, 我第一印象是乐观锁,毕竟做交易更新交易状态经常用到乐观锁,就自然想到这个SQL:update trans_order set order_status = 1 where order_no = 'xxxxxxxxxxx' and order_s.原创 2020-06-13 11:47:49 · 186 阅读 · 0 评论