底层原码
文章平均质量分 92
Y余先生
计算机小白一个,请各位大佬支支招
展开
-
ReentrantLock底层源码
ReentrantLock概述ReentrantLock类,实现了LOck接口,是一种可重入的独占锁,它具有与使用synchronized相同的一些基本行为和语义,但功能更强大。ReentrantLock内部通过内部类实现了AQS框架(AbstractQueuedSynchronized)的API来实现独占锁功能ReentrantLock主要利用CAS+AQS队列来实现。它支持公平锁和非公平锁,两者的实现类似。先通过CAS尝试获取锁;如果此时已经有线程占据了锁,那就加入AQS队列并且被挂起;当锁被原创 2020-12-02 20:24:58 · 226 阅读 · 0 评论 -
CopyOnWriteArrayList源码分析
CopyOnWriteArrayList:+没有初始容量的说法,需要添加元素时长度+1+涉及添加修改的时候使用ReentrantLock加锁,保证线程安全+遍历时不能进行删除操作+迭代使用snapshot快照,没有快速失败过程//替换public E set(int index, E element) { final ReentrantLock lock = this.lock; //先给容器加上锁,只有一个线程能够修改容器里面的元素 lock.lock(); try原创 2020-12-02 14:22:02 · 89 阅读 · 0 评论 -
ConcurrentHashMap底层源码分析
ConcurrentHashMap在JDK1.8以后使用的是Node数组+链表+红黑树的结构来实现的,并发控制使用Synchronized和CAS来操作,所以整个过程看起来是安全的,但是实际上在写入过程中是用CAS执行操作,只是表征安全,实际上不安全,但是独占锁时安全;// node数组最大容量:2^30private static final int MAXIMUM_CAPACITY = 1 << 30;// 默认初始值大小为16,必须是2的幂数private static final原创 2020-12-01 12:00:14 · 204 阅读 · 6 评论 -
ArrayList底层源码
ArrayList底层ArrayList底层定义一个初始容量initialCapacity默认大小为10如果初始容量大于零,则this.elementData = new Object[initialCapacity];如果初始容量等于零,则为空this.elementData = EMPTY_ELEMENTDATA;如果初始容量小于零,则抛出异常throw new IllegalArgumentException("Illegal Capacity: "+initialCapacit原创 2020-11-13 09:11:05 · 85 阅读 · 0 评论