2024年3月6日
简介 AbstractQueuedSynchronizer 是 Doug Lea 大师创作的用来构建锁或者其他同步组件的基础框架类。J.U.C 中许多锁和并发工具类的核心实现都依赖于 AQS,如:ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch 等。 AQS 的源码中 方法很多,但主要做了三……
阅读全文
2024年3月6日
Semaphore 信号量,可用于控制一定时间内,并发执行的线程数,基于 AQS 实现。可应用于网关限流、资源限制 (如 最大可发起连接数)。由于 release() 释放许可时,未对释放许可数做限制,所以可以通过该方法增加总的许可数量。 获取许可 支持公平和非公平模式,默认非公平模式。公平模式无论是否有许可,都会先判断是否有线程在……
阅读全文
2024年3月6日
类图结构 J.U.C 的锁组件中 类相对较少,从 JDK 相应的包中也能看出来,下图标记了其中最主要的几个接口和类,也是本文要分析的重点。 下图 将这几个接口和类 以类图的方式展现出来,其中包含了它们所声明的主要方法。 Lock 组件 Lock 组件的结构很简单,只有一个接口和一个实现类,源码如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14……
阅读全文
2024年3月6日
利用 IDEA 整理类图还是蛮不错的,虽然这个功能 BUG 很多。下图是 J.U.C 并发包中所有类组成的类图,源码看多了 再去整理这个图,感觉还是很爽的。 根据功能,主要划分了六个部分,其中比较重要的是:线程池及其相关类、并发容器、AQS 与锁与同步工具类、原子类。图可能整理的不够细致,但看着这些类,回想一下其中……
阅读全文
2024年3月6日
线程池核心组件图解 看源码之前,先了解一下该组件 最主要的几个 接口、抽象类和实现类的结构关系。 该组件中,Executor 和 ExecutorService 接口 定义了线程池最核心的几个方法,提交任务 submit ()、关闭线程池 shutdown()。抽象类 AbstractExecutorService 主要对公共行为 submit()系列方法进行了实现,这些 submit()……
阅读全文
2024年3月6日
TreeSet 是 Java 中实现有序集合的一个类,它基于红黑树实现,可以保证集合中的元素按照自然顺序或自定义顺序排序。在本文中,我们将详细介绍 TreeSet 的实现原理,并结合源码和示例代码进行解释。 TreeSet 的底层数据结构 TreeSet 的底层数据结构是红黑树,红黑树是一种自平衡二叉搜索树,它可以保证在插入、删除和查找元素时,时间复……
阅读全文
2024年3月6日
LinkedList LinkedList 是 Java 中实现双向链表的一个类,它实现了 List 接口和 Deque 接口。LinkedList 可以用作栈、队列和双端队列。在本文中,我们将详细介绍 LinkedList 的实现原理,并结合源码和示例代码进行解释。 LinkedList 的结点 LinkedList 的结点是一个静态内部类 Node,它包含三个属性:item 表示结点存储的元素,next 表示下一个结点……
阅读全文
2024年3月6日
HashMap 大家都清楚,底层是 数组 + (链表 / 红黑树),元素是无序的,而 LinkedHashMap 则比 HashMap 多了这一个功能,并且,LinkedHashMap 的有序可以按两种顺序排列,一种是按照插入的顺序,一种是按照访问的顺序(初始化 LinkedHashMap 对象时设置 accessOrder 参数为 true),而其内部是靠 建立一个双向链表 来维护这个顺序的,在每次插入……
阅读全文
2024年3月6日
HashSet 本身并没有什么特别的东西,它提供的所有集合核心功能,都是基于 HashMap 来实现的。如果了解 HashMap 源码的实现,HashSet 源码看起来跟玩一样。我的博客中有专门分析 HashMap 源码的文章,不熟悉的请自行翻阅。 HashSet 的特点如下: 内部使用 HashMap 的 key 存储元素,以此来保证元素不重复; HashSet 是无序的,因为 HashMap 的 key 是无序的; HashSet 中……
阅读全文
2024年3月6日
作为工作中最重要、最常用的容器之一,当然还是要自己动手写一篇 HashMap 的源码解析来加深对其的印象咯,而且它的设计与实现 也有很多值得学习的地方。 源码赏析 JDK1.8 的 HashMap 底层使用的是 动态数组,数组中元素存放的是 链表或红黑树。核心源码如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32……
阅读全文