-
锁专题(9) PriorityBlockingQueue 优先级阻塞队列源码解析
PriorityBlockingQueue
简介
一个无界BlockingQueue,它使用与类PriorityQueue相同的排序规则,并提供阻塞检索操作。
尽管此队列在逻辑上是不受限制的,但是尝试添加可能由于资源耗尽 OutOfMemoryError而失败。
限制如下:
(1)此类不允许使用null元素。
(2)依赖于Comparable的优先级队列也不允许插入不可比较的...
2020-10-17 08:15:55 |
Lock
-
锁专题(9) LinkedTransferQueue 源码解析
LinkedTransferQueue
是什么
基于链接节点的无限制 TransferQueue。
此队列针对任何给定的生产者对元素FIFO(先进先出)进行排序。
队列的开头是某个生产者在队列中停留时间最长的元素。
队列的尾部是某个生产者最短时间进入队列的元素。
LinkedTransferQueue 是 LinkedBlockingQueue、SynchronousQueu...
2020-10-17 08:15:55 |
Lock
-
锁专题(9) LinkedBlockingQueue 使用入门及源码解析
问题
LinkedBlockingQueue 是什么?
优缺点?
应用场景?
源码实现?
个人启发?
LinkedBlockingQueue
双向并发阻塞队列。
所谓双向是指可以从队列的头和尾同时操作,并发只是线程安全的实现,阻塞允许在入队出队不满足条件时挂起线程,这里说的队列...
2020-10-17 08:15:55 |
Lock
-
锁专题(9) DelayQueue 延迟队列源码解析
DelayQueue
简介
延迟元素的无限制BlockingQueu,其中元素只能在其延迟到期后才能获取。
当元素的getDelay(TimeUnit.NANOSECONDS)方法返回小于或等于零的值时,就会发生过期。
即使未到期的元素无法使用take或poll删除,它们也被视为普通元素。
此队列不允许 null 元素。
思考题
为什么不允许有 null 元素?
其实和其他几...
2020-10-17 08:15:55 |
Lock
-
锁专题(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