
java源码解析
山丘..
这个作者很懒,什么都没留下…
展开
-
ReentrantLock源码解析
ReentrantLock源码解析ReentrantLock中使用了AbstractQueuedSynchronizer也就是AQS,完成了锁的获取和释放等操作。下面来通过介绍ReentrantLock源码来理解,实现原理。ReentrantLock的构造方法: /** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)原创 2020-07-24 14:58:27 · 173 阅读 · 0 评论 -
threadpoolexecutor源码解析
threadpoolexecutor源码解析一、线程池的任务目标如果存在大量的创建线程、销毁线程操作,效率是很低的。因为创建线程是比较耗时、耗资源的。如果非常频繁地创建、销毁线程会极大地降低效率。为避免这种情况的发生,产生了threadpoolexecutor线程池。二、threadpoolexecutor源码重要成员: //AtomicInteger提供原子操作来进行Integer的使用。ctl是AtomicInteger的,所以是线程安全的。 //用ctl来记录线程的个数。 //ctl维护原创 2020-07-02 19:36:53 · 226 阅读 · 0 评论 -
HashMap在JDK1.7和JDK1.8中的区别
HashMapjdk1.7中底层是由数组(也有叫做“位桶”的)+链表实现;jdk1.8中底层是由数组+链表/红黑树实现可以存储null键和null值,线程不安全。在HashMap中,null可以作为键,这样的键只有一个,但可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该key,也可以表示该key所对应的value为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个key,应该用containsKey()方法原创 2020-06-22 16:32:26 · 1057 阅读 · 0 评论 -
HashTable、HashMap、ConcurrentHashMap的区别
HashTable1.8、HashMap1.8、ConcurrentHashMap1.8的区别HashTable1.8底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做相关优化;Hashtable是一种能提供快速插入和查询的数据结构,无论其包含多少Item(条目),执行查询和插入操作的平均时间复杂度总是接近O(1);初始size为11,扩容:newsize = olesiz原创 2020-06-22 16:01:42 · 427 阅读 · 0 评论 -
HashTable1.8源码解析
HashTable介绍:HashTable的底层实现是由“数组+链表”来实现的。和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。无论key还是value都不能为null,且线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低。但是Hashtable是一种能提供快速插入和查询的数据结构,无论其包含多少Item(条目),执行查询和插入操作的平均时间复杂度总是接近O(1)。HashTable源码解析:HashTable的继承关原创 2020-06-22 15:34:14 · 316 阅读 · 0 评论 -
ConcurrentHashMap1.8扩容实现详解
上一篇ConcurrentHashMap源码解析中只是初步分析了ConcurrentHashMap的实现,这篇将详细讲述ConcurrentHashMap的扩容实现过程。触发扩容的情况当往ConcurrentHashMap中插入一个Key/Value结点时,有可能触发扩容。1.第一种情况; 如果新增结点后,所在链表的元素大于等于阈值8,则会调用treeifyBin()方法,把链表转化为红黑树,但是再进行结构转换之前,还需要对数组长度进行判断。treeifyBin()方法:private final原创 2020-06-19 14:43:31 · 858 阅读 · 0 评论 -
ConcurrentHashMap源码解析
ConcurrentHashMap源码解析ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化,而不是像HashTable一样为几乎每个方法都添加了synchronized锁,这样的锁无疑会影响到性能。本文的分析的源码是JDK8的版本,与JDK6的版本有很大的差异。实现原创 2020-06-18 17:00:16 · 298 阅读 · 0 评论 -
HashMap1.8源码解析
HashMap1.8源码解析首先看一下HashMap1.8的继承关系:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}和1.7一样1.8不仅继承了AbstractMap,而且实现了Map、Cloneable和Serializable接口,所以HashMap也可以序列化。HashMap1.8的存储结构:在1.原创 2020-06-17 12:20:51 · 332 阅读 · 0 评论 -
HashMap1.7源码解析
HashMap1.7源码解析HashMap的继承关系:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { private static final long serialVersionUID = 362498820763181265L; }HashMap不仅继承了AbstractMap,而且实现了原创 2020-06-16 19:27:14 · 405 阅读 · 0 评论