![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析
Double____C
这个作者很懒,什么都没留下…
展开
-
并发源码解析(七)--Semaphore
一、SemaphoreSemaphore信号量–同CountDownLatch和CycleBarrier类似,但是它的计时器是递增的。二、源码分析2.1 继承关系有3个内部类,实现了公平锁和非公平锁,关系如下。会不会有点眼熟,很像ReentrantLock的公平锁和非公平锁的实现。2.2 属性属性很简单private static final long serialVersi...原创 2019-10-19 10:58:09 · 158 阅读 · 0 评论 -
并发源码解析(六)--CyclicBarrier
一、CyclicBarrierCyclicBarrier–回环屏障:有点类似于CountDownLatch,但是比CountDownLatch更厉害一点。CountDownLatch是一次性的计数器,计数到0就会立刻返回。而CyclicBarrier的计数器达到0了之后可以重用。二、源码分析2.1 继承关系无2.2 属性 /** 可以看出基于独占锁实现 */ private...原创 2019-10-18 16:01:49 · 138 阅读 · 0 评论 -
并发源码解析(五)--CountDownLatch
一、CountDownLatch原创 2019-10-18 11:18:52 · 134 阅读 · 0 评论 -
并发源码解析(四)--ReentrantLock
一、ReentrantLockReentrantLock是可重入的独立锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而被加入该锁的AQS阻塞队列里面。可以实现公平锁和非公平锁二、源码分析2.1 继承关系实现了lock接口和序列化接口还有3个静态内部类其中的关系如下:其中Sync的lock方法为抽象方法,交给子类去实现2.2 构造方法无参构造方法publ...原创 2019-10-17 20:08:42 · 168 阅读 · 0 评论 -
并发源码解析(三)--AQS条件队列
一、条件队列AQS的一个锁可以对应多个条件变量。使用时先使用lock.newCondition()来new出来一个在AQS内部声明的ConditionObject对象,ConditionObject是AQS的内部类,可以访问AQS内部的变量和方法。而在每个条件变量内部都维护了一个条件队列,用来存放调用条件变量的await()方法时被阻塞的线程。这个条件队列和AQS队列不是一样东西!二、源码分...原创 2019-10-17 15:22:26 · 306 阅读 · 0 评论 -
并发源码解析(一)--抽象同步队列AQS
一、AQSAQS,即AbstractQueuedSynchronizer抽象同步队列,是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的,因此这个类非常重要。因此在谈到并发包的源码时,先讲一下AQS二、源码分析2.1可以看到AQS继承了AbstractOwnableSynchronizer。由线程独占的同步器,这个类为创建锁和相关同步器提供了基础,这个类比较简单。publ...原创 2019-10-17 09:05:15 · 174 阅读 · 0 评论 -
Java集合系列源码分析(八)-- TreeMap(红黑树)
一、TreeMapTreeMap是有序的,可以实现自定义的比较器来决定升序还是降序。存储key-value,内部使用红黑树。强烈建议先看之前的二叉搜索树和平衡二叉树,了解二叉搜索树和平衡二叉树再看这篇,否则红黑树有点难理解二、TreeMap常用方法2.1 属性实现了NavigableMap接口,而NavigableMap又继承于SortedMap,又此可知,这个map是有序的。因...原创 2019-10-15 22:54:07 · 258 阅读 · 0 评论 -
Java集合系列源码分析(七)-- 平衡二叉树
一、平衡二叉树平衡二叉树(Balanced Binary Tree)是为了防止树的高度增长过快,出现类似于上一节最后举出的那种特殊情况,降低了二叉排序树的性能。于是人们规定,保证任意节点的左、右子树高度差的绝对值不超过1,这样的二叉树成为平衡二叉树。二、平衡二叉树的方法首先,平衡二叉树操作中始终需要保持平衡,因此必须要准守平衡原则,平衡二叉树的平衡原则是:每次需要调整的都是最小不平衡二叉...原创 2019-10-15 17:01:28 · 251 阅读 · 0 评论 -
Java集合系列源码分析(六)-- 二叉查找树
之前讲了部分集合源码,有涉及到红黑树,一下就讲红黑树有点不好讲,先从简单点的树开始讲,以下就从二叉查找树开始讲一、 二叉查找树二叉查找树(Binar Search Tree),又称二叉搜索树,二叉排序树二叉查找树特性:若左子树非空,则左子树上所有的节点关键字值均小于根节点的关键字值若右子树非空,则右子树上所有节点关键字值均大于根节点的关键字值左右子树本身也分别是一颗二叉查找树简单...原创 2019-10-12 22:03:19 · 142 阅读 · 0 评论 -
Java集合系列源码分析(四)--HashSet
一、HashSetHashSet是基于HashMap实现的,他的方法比较简单,但是大部分方法都和HashMap有关。需要先了解HashMap在了解HashSet。关于HashMap在上一篇源码分析有介绍。了解完HashMap再来看HashSet会发现其实HashSet会比较简单二、源码分析2.1 继承结构和分析实现了Set接口,继承AbstractSet2.2 HashSet属性...原创 2019-10-11 15:12:44 · 191 阅读 · 0 评论 -
Java集合系列源码分析(三)--HashMap
一、HashMap基于数组和链表实现的HashMap,当链表数据过多时,会转为红黑树提高查询效率。实现采用了多种数据结构,所以HashMap在增删改查上的效率都很高,不考了哈希冲突时间复杂度可以达到O(1)二、源码分析2.1 继承结构和层次实现了Map接口,克隆接口和序列化接口2.2 HashMap属性/** * 默认初始容量 */static final int DEFA...原创 2019-10-10 14:05:06 · 148 阅读 · 0 评论 -
Java集合系列源码分析(二)--LinkedList
一、LinkedListlinkedlist底层是双向链表,插入和删除操作较快,查询和随机查询操作较慢。非线程安全。二、源码分析2.1 继承结构和层次实现了序列化、克隆、list接口。Deque:双端队列接口,扩展自Queue2.2 LinkedList属性//集合元素个数transient int size = 0;/** * 首节点指针transient Nod...原创 2019-10-10 10:06:58 · 164 阅读 · 0 评论 -
Java集合系列源码分析(一)--ArrayList
一、ArrayListArrayList是非常常用的集合类之一,其对数组进行封装,并进行动态的增加和缩减长度。因为底层是数组,所以写的效率要低点,因为涉及到新内存的开辟和数组元素的拷贝,但是查询效率非常高。非线程安全二、源码分析2.1 继承结构和层次可以看到Arraylist继承抽象类AbstractList,而AbstractList继承自AbstractCollection其中:...原创 2019-10-09 23:24:36 · 214 阅读 · 0 评论