- 博客(6)
- 收藏
- 关注
原创 ConcurrentHashMap底层源码解析
//Put的关键方法 final V putVal(K key, V value, boolean onlyIfAbsent) { //如果key为空,或者value为空,则抛出空指针异常 if (key == null || value == null) throw new NullPointerException(); //通过key的hash,重新计算hash值,计算过程高位保持低位异或,最高位必改成0 int hash = spread(key.hashCode()); //节点个数统计 int b
2020-12-19 11:33:21
206
1
原创 ReentrantLock原理
ReentrantLock主要利用CAS+AQS队列来实现。它支持公平锁和非公平锁,两者的实现类似。 CAS:Compare and Swap,比较并交换。CAS有3个操作数:内存值V、预期值A、要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。该操作是一个原子操作,被广泛的应用在Java的底层实现中。在Java中,CAS主要是由sun.misc.Unsafe这个类通过JNI调用CPU底层指令实现 ReentrantLock主要利用CAS+AQS队列来实现。它支持公平锁和
2020-12-03 09:05:16
139
原创 CopyOnWriteArrayList详解
CopyOnWriteArrayList详解 CopyOnWriteArrayList(写数组的拷贝)是ArrayList的一个线程安全的变体,CopyOnWriteArrayList和CopyOnWriteSet都是线程安全的集合,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。 它绝对不会抛出ConcurrentModificationException的异常。因为该列表(CopyOnWriteArrayList)在遍历时将不会被做任何的修改。 CopyOn
2020-12-03 09:01:04
402
原创 HashMap部分源码解析
1、概述 HashMap基于Map接口实现,元素以键值对的方式存储,并且允许使用null 建和null 值, 因为key不允许重复,因此只能有一个键为null,另外HashMap不能保证放入元素的顺序,它是无序的,和放入的顺序并不能相同。HashMap是线程不安全的。 2、继承关系 public class HashMap<K,V>extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable 3
2020-12-03 08:53:41
125
原创 红黑树解析
红黑树解析 红黑树定义和性质 红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须满足下面性质: 1:每个节点要么是黑色,要么是红色。 2:根节点是黑色。 3:每个叶子节点都是黑色。(叶子是NIL节点) 4:每个红色结点的两个子结点一定都是黑色。 5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。 ...
2020-11-16 20:32:44
138
原创 ArrayList解析 + 部分源码解析
ArrayList深度解析 ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。 定义: List接口的大小可变数组的实现,位于API文档的java.util.ArrayList。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector类,除了此类是不同步的。)
2020-11-12 19:57:50
176
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅