jdk1.8源码解析
文章平均质量分 64
查看源码设计,理解编程之美
shiker1996
误人子弟之误人子弟,补更频繁~~~~~
展开
-
JDK1.8源码解析-ReentrantLock
上一篇文章我们分析了AQS的原理及源码,在开始解读ReentrantLock之前我们先来回顾以下之前学习的AQS的常用方法。等待线程获取资源的方法:public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE),...原创 2021-12-09 22:39:38 · 295 阅读 · 0 评论 -
JDK1.8源码解析-AbstractQueuedSynchronizer
AQS是jdk中锁机制的重要框架,我们在通过继承AQS,进行队列的操作时,方法的作用位置大体如下:Api中对该类的描述如下:为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。此类的设计目标是成为依靠单个原子 int 值来表示状态的大多数同步器的一个有用基础。子类必须定义更改此状态的受保护方法,并定义哪种状态对于此对象意味着被获取或被释放...原创 2021-12-09 22:40:46 · 831 阅读 · 0 评论 -
JDK1.8源码解析-HashMap
jdk1.8对hashmap进行了优化,1.8之前hashmap的构成是由数组和链表组成的,而jdk1.8则对bucket容器中的元素结构进行了优化,若使用链表则在大量元素进行查找时会降低效率。我们不妨从它的源码入手,了解jdk1.8对hashmap所作的优化。---------------------------------------------------------------更新...原创 2021-12-09 22:41:29 · 258 阅读 · 0 评论 -
JDK1.8源码解析-HashMap.TreeNode
在JDK 1.8 以前 HashMap 的实现是数组+链表,哈希函数很难保证元素的均匀分布。当 HashMap 中有大量的元素都存放到同一个桶中时,这个桶下有一条长长的链表,这个时候 HashMap 就相当于一个单链表,假如单链表有 n 个元素,遍历的时间复杂度就是 O(n),完全失去了它的优势。针对这种情况,JDK 1.8 中引入了 红黑树(查找时间复杂度为 O(logn))来优化这个问...原创 2021-12-09 22:41:51 · 591 阅读 · 0 评论 -
JDK1.8源码解析-LinkedList
类关系图类属性//列表大小transient int size = 0;/** * 首节点指针 */transient Node<E> first;/** * 尾节点指针 */transient Node<E> last;private static class Node<E> { E item;//结点中的元素...原创 2021-12-09 22:41:04 · 232 阅读 · 0 评论 -
JDK1.8源码解析-CopyOnWriteArrayList
类关系图属性因为CopyOnWriteArrayList最主要的功能是实现写时复制,而实现写时复制的关键就是要在实现在并发情况下数据的遍历与修改能够同步进行,这就需要通过可重入锁实现修改时的数组同步。/** 保护所有存取器的锁 */final transient ReentrantLock lock = new ReentrantLock();/** 只能通过 get...原创 2021-12-09 22:42:28 · 183 阅读 · 0 评论 -
JDK1.8源码解析-ArrayList
关系图可以看到,ArrayList继承了AbstractList,而AbstactList有继承了AbstractCollection,实现了list。并且ArrayList实现了Cloneable支持对象的克隆,也实现serializable支持序列化。内置属性:private static final long serialVersionUID = 868345258112...原创 2021-12-09 22:42:59 · 155 阅读 · 0 评论