-
锁专题(9) CyclicBarrier 栅栏源码深度解析
栅栏(Barrier)
简介
栅栏(Barrier)类似于闭锁,它能阻塞一组线程直到某个事件发生。
闭锁是一次性对象,一旦进入最终状态,就不能被重置了。
栅栏与闭锁的关键区别在于,所有线程必须同时达到栅栏位置,才能继续执行。
闭锁用于等待事件,而栅栏用于等待其他线程。
而我再等你点赞。
java 手写并发框架(一)异步查询转同步的7种实现方式 我就用到了 CyclicBarri...
2020-10-17 08:15:55 |
Lock
-
锁专题(9) CountDownLatch 源码深度解析
CountDownLatch 闭锁
我们在 java 手写并发框架(一)异步查询转同步的7种实现方式 和 从零手写并发框架(二)异步转同步实现4种锁策略 都是用过这个类,感兴趣的小伙伴可以看一下。
说明
CountDownLatch 是一种同步工具类,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止。
可以让一个线程等待一组事件发生后(不一定要线程结束)继续执行;
...
2020-10-17 08:15:55 |
Lock
-
锁专题(9) ConcurrentSkipListSet 源码解析
ConcurrentSkipListSet
简介
基于以下内容的可伸缩并发NavigableSet}实现:ConcurrentSkipListMap。
万字长文,ConcurrentSkipListMap源码详解
集合中的元素根据其可比自然顺序或在集合创建时提供的Comparator保持排序,具体取决于使用哪个构造函数。
set 汇总
我们学习了大量的 jdk 的集合...
2020-10-17 08:15:55 |
Lock
-
锁专题(9) ConcurrentSkipListMap 源码解析
ConcurrentSkipListMap
简介
可伸缩的并发ConcurrentNavigableMap 实现。
根据可比较的自然顺序或根据在创建 map 时提供的Comparator对 map 进行排序,具体取决于所使用的构造函数。
入门例子
ConcurrentSkipListMap<String, Integer> map = new ConcurrentS...
2020-10-17 08:15:55 |
Lock
-
锁专题(9) ConcurrentLinkedQueue 源码深度解析
ConcurrentLinkedQueue
简介
这个类由李大狗和 Martin Buchholz 一起实现的。
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,遵循队列的FIFO原则,队尾入队,队首出队。
注意:此队列不允许使用 null 元素。
入门案例
这里我们主要演示方法使用,就不演示并发安全了,后面源码会解释。
ConcurrentLi...
2020-10-17 08:15:55 |
Lock
-
锁专题(9) ArrayBlockingQueue 使用入门及源码解析
ArrayBlockingQueue
简介
由数组支持的有界阻塞队列。该队列对元素FIFO(先进先出)进行排序。
队列的开头是已在队列中停留最长时间的元素。
队列的尾部是最短时间位于队列中的元素。
新元素插入到队列的尾部,并且队列检索操作在队列的开头获取元素。
应用场景
多线程环境中,通过队列可以很容易实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利...
2020-10-17 08:15:55 |
Lock
-
锁专题(8)java 从零手写实现 ReadWriteLock 读写锁
点赞再看,已成习惯。
序言
我们在前面的文章中详细介绍了 jdk 自带的可重入读写锁使用及其源码。
本节就让我们一起来实现一个读写锁。
最基础的版本
思路
我们先实现一个最基础版本的读写锁,便于大家理接最核心的部分。
后续将在这个基础上持续优化。
接口定义
为了后续拓展,我们统一定义基础的接口,一共 4 个方法:
package com.github.houbb....
2020-10-17 08:15:55 |
Lock
-
锁专题(7)从零手写实现你的 SpinLock 自旋锁及可重入锁
点赞再看,已成习惯。
序言
我们在前面的文章中详细介绍了 jdk 自带的可重入锁使用及其源码。
本节就让我们一起来实现一个可重入锁。
接口定义
为了便于后期拓展,我们统一定义接口。
接口
继承自 jdk Lock 接口,并且新增了几个常用的方法。
package com.github.houbb.lock.api.core;
import java.util.c...
2020-10-17 08:15:55 |
Lock