Java并发
Zn昕
这个作者很懒,什么都没留下…
展开
-
AQS笔记
AQS笔记概述AQS 是 AbstractQueueSynchronized 抽象同步队列的简称,它是实现同步器的基础组件,并发包中锁的底层就是使用 AQS 实现的。AQS 是一个 FIFO 的双向队列,其内部通过节点 head 和 tail 记录队首和队尾元素,队列元素的类型为 Node。源码state(字段)单一的状态信息,可以通过 getState()、setState()、c...原创 2019-04-11 10:04:21 · 360 阅读 · 0 评论 -
LinkedBlockingQueue笔记
LinkedBlockingQueue笔记概述LinkedBlockingQueue 是一个利用独占锁(ReentrantLock)实现的阻塞队列,其底层是一个单向链表(静态内部类 Node),默认构造器中,其队列的长度为 int 的最大值,如果队列满了,后续插入节点阻塞,并视情况是否丢弃,该队列有两个独占锁,对头节点操作使用一个独占锁,对尾节点操作使用一个独占锁,来存放被阻塞的线程/** ...原创 2019-04-13 16:26:58 · 139 阅读 · 0 评论 -
ReentrantReadWriteLock笔记
ReentrantReadWriteLock笔记概述为了满足读多写少的场景,ReentrantReadWriteLock 应运而生,采用读写分离的策略,允许多线程同时获取读锁,读写锁内部维护了一个 ReadLock 和一个 WriteLock ,他们依赖 Sync 实现具体功能,Sync 继承字 AQS,并且也提供了公平和非公平的实现,可以近似的理解为书无级别为 Serializable 串行...原创 2019-04-13 16:28:10 · 146 阅读 · 0 评论 -
CopyOnWriteList笔记
CopyOnWriteList笔记概述CopyOnWriteList 是一个写时复制的策略保证 list 的一致性,所以在其增删改的操作中都使用了独占锁 ReentrantLock 来保证某个时间只有一个线程能对 list 数组进行修改。其底层是对数组的修改,调用 Arrays.copyarray() 方法进行对数组的复制,在底层还是调用的 C++ 去进行的数组的复制 System.copya...原创 2019-04-13 16:28:55 · 5179 阅读 · 0 评论 -
PriorityBlockingQueue笔记
PriorityBlockingQueue笔记概述带优先级的阻塞队列,其底层是一个数组,该队列会自动扩容,默认会使用对象的 compareTo 方法进行比较,也可以自定义 comparator /** Default array capacity. */ private static final int DEFAULT_INITIAL_CAPACITY = 11; /...原创 2019-04-17 10:38:56 · 209 阅读 · 0 评论 -
ArrayBlockingQueue笔记
ArrayBlockingQueue笔记概述ArrayBlockingQueue 是一个利用独占锁(ReentrantLock)实现的阻塞队列,其底层是一个有界数组(Array),由于移动数组的位置代价过大,其利用 takeIndex 的移动来保证查找头节是理论上数组的队列头部,利用 putIndex 保证插入的节点位置理论上是数组队列队尾。此队列用了一个全局的独占锁,粒度大,性能差/** ...原创 2019-04-15 10:25:25 · 128 阅读 · 0 评论 -
LinkedBlockingQueue笔记
LinkedBlockingQueue笔记概述LinkedBlockingQueue 是一个利用独占锁(ReentrantLock)实现的阻塞队列,其底层是一个单向链表(静态内部类 Node),默认构造器中,其队列的长度为 int 的最大值,如果队列满了,后续插入节点阻塞,并视情况是否丢弃,该队列有两个独占锁,对头节点操作使用一个独占锁,对尾节点操作使用一个独占锁,来存放被阻塞的线程/** ...原创 2019-04-15 10:26:25 · 94 阅读 · 0 评论