
Jdk-源码系列
主要集合、多线程源码剖析
linkingfei
coder;
展开
-
集合类LinkedList简单的实现
class LinkedList2<E>{ //链表节点 private static class Node<E>{ E item; Node<E> next; Node<E> prev; public Node(E item,Node<E> next,Nod...原创 2018-04-21 14:37:53 · 274 阅读 · 0 评论 -
java集合ArrayList
ArrayList:public class ArrayList { private static final int INITIAL_SIZE=10; private int size=0; private int[] array; //定长 public ArrayList(){ array=new int[INITIAL_SI翻译 2017-11-05 23:34:48 · 139 阅读 · 0 评论 -
并发源码-线程池使用
1、简介简单来说使用线程池有以下几个目的:线程是稀缺资源,不能频繁的创建。解耦作用;线程的创建于执行完全分开,方便维护。应当将其放入一个池子中,可以给其他任务进行复用。2、执行线程主线程首先要创建实现 Runnable 或者 Callable 接口的任务对象。把创建完成的实现 Runnable / Callable 接口的 对象直接交给 ExecutorService 执行ExecutorService.execute(Runnable command))或者也可以把 Runnable原创 2020-10-17 13:10:34 · 266 阅读 · 0 评论 -
并发源码-AQS同步组件
1、简介本文将分析 java.util.concurrent 包下的同步组件CountDownLatch和CyclicBarrier、Semaphore。通过分析这三个同步组件,可使我们对 Java 线程间协同有更深入的了解。CountDownLatch 允许一个或一组线程等待其他线程完成后再恢复运行。线程可通过调用await方法进入等待状态,在其他线程调用countDown方法将计数器减为0后,处于等待状态的线程即可恢复运行。CyclicBarrier (可循环使用的屏障)则与此不同,Cyc原创 2020-10-15 22:16:27 · 180 阅读 · 0 评论 -
并发源码分析-AQS
1、简介Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制),但是它却缺少了获取锁与释放锁的可操作性,可中断、超时获取锁,且它为独占式在高并发场景下性能大打折扣。 在介绍Lock之前,我们需要先熟悉一个非常重要的组件,掌握了该组件JUC包下面很多问题都不在是问题了原创 2020-10-13 22:53:03 · 205 阅读 · 0 评论 -
集合源码-LinkedHashMap
1、简介LinkedHashMap 继承自 HashMap,在 HashMap 基础上,内部维护了一个双向链表,解决HashMap不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持,可以用来实现LRU缓存策略。LinkedHashMap的实现很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。2、继承关系LinkedHashMap继承HashMap,拥有HashMap的所有特性,并且额外增加的按一定顺序访问的特性。LinkedH原创 2020-10-09 21:40:03 · 130 阅读 · 0 评论 -
集合源码-HashMap
1、简介HashMap采用key/value存储结构,底层基于散列算法实现,HashMap 允许 null 键和 null 值,它是非线程安全的,且不保证元素存储的顺序,在计算哈键的哈希值时,null 键哈希值为 0。2、继承体系实现了Cloneable,可以被克隆。实现了Serializable,可以被序列化。实现了Map接口,具有Map的所有功能。3、存储结构...原创 2020-10-09 09:26:06 · 179 阅读 · 0 评论 -
集合源码-CopyOnWriteArrayList
1、简介CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,不阻塞读操作,实现读写分离。2、继承体系CopyOnWriteArrayList实现了List, RandomAccess, Cloneable, java.io.Serializable等接口。3、源码解析3.1 属性 // lock锁 final transient Reentrant原创 2020-10-07 17:31:33 · 134 阅读 · 0 评论 -
集合源码-LinkedList
1、简介LinkedList是一个以双向链表实现的List,它除了作为List使用,还可以作为队列或者栈来使用。LinkedList 也支持空值和重复值。LinkedList 是非线程安全的集合类。2、继承体系LinkedList不仅实现了List接口,还实现了Queue和Deque接口,所以它既能作为List使用,也能作为双端队列使用,当然也可以作为栈使用。3、源码分析3.1 主要属性 // 长度 transient int size = 0; // 首节点 tran原创 2020-10-07 16:53:25 · 145 阅读 · 0 评论 -
集合源码-ArrayList
1、 ArrayList1.1 简介ArrayList是一种以动态数组实现的List集合。其中,元素可以为空值或重复,当元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组;其次,ArrayList 是非线程安全类。1.2 继承关系List 提供了基础的添加、删除、遍历等操作。RandomAccess 提供了随机访问的能力。Cloneable,可以被克隆。Serializable,可以被序列化。1.3 源码解析1.3.1 属性 // 默认初始化长度 priva原创 2020-10-07 15:55:04 · 131 阅读 · 0 评论