ConcurrentLinkedQueue 源码浅析

2021-06-07
阅读 17 分钟
2.1k
队列是一种常见的数据结构,主要特点是 FIFO,Java 为其定义了接口类:Queue,并提供了丰富的实现,有底层基于数组的[有界]队列,也有基于节点链接的无界队列,有阻塞队列,有非阻塞队列,还有并发安全的队列。常见的队列实现的两种方式:数组、节点链接。
封面图

JUC 并发类概览

2021-04-12
阅读 2 分钟
1.3k
AQS内部有两个队列,一个等待队列(前后节点),一个条件队列(后继节点),其实是通过链表方式实现;等待队列是双向链表;条件队列是单向链表;条件队列如果被唤醒,将后接到等待队列上;通过内部持有的 state,加以模板模式,提供了两种资源争抢模式:排他、共享;而在争抢时,又辅以公平、非公平竞争的考虑;排他与共...

ConcurrentHashMap 的 addCount 和 fullAddCount 阅读

2021-03-18
阅读 12 分钟
4.7k
ConcurrentHashMap 源码目前在网络上已有众多解析。本文章主要关注其数量 size 的相关并发实现,试图自己解析该实现,如有错漏,请指正(预警:本文较啰嗦)。ConcurrentHashMap#size 的关注点在于并发下结构性变更导致的数目统计,是如何实现高性能、高准确性的。实际上,ConcurrentHashMap 目前使用的算法与 LongAddr ...

ConcurrentHashMap 的 Traverser 阅读

2020-12-15
阅读 9 分钟
2.3k
ConcurrentHashMap 源码目前在网络上已有众多解析。本文章主要关注其基于 Traverser 的遍历实现,试图仔细解析该实现,如有错漏,请指正。  ConcurrentHashMap 的 Traverser 主要是用于内部数组的遍历功能支持,如何实现在内部数组扩容阶段期间,其他线程也能够正确地遍历输出,并保证良好的性能(不使用各种锁),Tra...

ConcurrentHashMap 的 transfer 阅读

2020-11-17
阅读 8 分钟
2.1k
ConcurrentHashMap 源码目前在网络上已有众多解析。本文章主要关注方法 transfer,试图仔细解析该实现,如有错漏,请指正。