AQS 工具类分析

1. CountDownLatch API state: 需要等待的线程数 method: ` // 多种实现 public void await() throws InterruptedException { sync.acquireSharedInterruptibly(1); } public void countDown( ...

AQS

一. 基础原理 AQS是基于双向链表结构的队列实现一个同步器。通过多个线程同步竞争state的状态获取锁,未获取到锁的线程放入队列中进行等待。 AQS可以认为是以CLH琐为基础的变种实现 > CLH锁也是一种基于链表的可扩展、高性能、公平的自旋锁,申请线程仅仅在本地变量上自旋,它不断轮询前驱的状态,假设发现前驱释放了锁就结束自旋。从实现上看,CLH锁是一种自旋锁,能确保 ...

ConcurrentSkipListMap

原理 跳表:一种加了索引的链表 复杂度:log(n) 以多层链表的形式实现,每一层都下一层的部分节点,可以看成上层是下层的索引。 最底层是全部的数据,按顺序存储的链表。 主要三种节点 头节点:无数据,有层级属性 普通节点:数据节点,next指针 索引节点:数据,next指针,down指针 删除操作 cas将节点值更新 ...

ConcurrentHashMap

并发特点 死循环处理修改,处理不成功则更新到最新状态,处理成功则跳出 一、基础 数组 + 链表 + 红黑树 链表和红黑树会相互转换 多线程按分配步长进行扩容任务分配 数组戳记使用 哈希混淆 头节点分类 分格计数 `java private static final int MAXIMUM_CA ...

ConcurrentLinkedQueue

ConcurrentLinkedQueue 入队将节点放入队尾,出队将节点从队首移除 特性: 入队后不一定会修改tail指针 出队不一定会更新head指针 节点 入队 将入队节点设置到当前队尾节点的 next 节点上; 更新tail节点, 如果tail节点的next ...