-
JCIP-12-环形队列
Q
是什么?
优势?
使用场景?
无锁队列怎么实现?
1.环形队列是什么
队列是一种常用的数据结构,这种结构保证了数据是按照“先进先出”的原则进行操作的,即最先进去的元素也是最先出来的元素.环形队列是一种特殊的队列结构,保证了元素也是先进先出的,但与一般队列的区别是,他们是环形的,即队列头部的上个元素是...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-11-二叉堆
Q
是什么?
有什么用?
优势?
使用场景?
二叉堆
二叉堆是完全二元树或者是近似完全二元树,按照数据的排列方式可以分为两种:最大堆和最小堆。
最大堆:父结点的键值总是大于或等于任何一个子节点的键值;
最小堆:父结点的键值总是小于或等于任何一个子节点的键值。
示意图如下:
二叉堆一般都通过”...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-10-优先级队列 Priority Queue
相关学习
优先级队列
二叉堆
堆排序
延迟队列
Q
是什么?
怎么用
注意事项?
源码
优先级队列
我们知道队列是遵循先进先出(First-In-First-Out)模式的,但有些时候需要在队列中基于优先级处理对象。举个例子,比方说我们有一个每日交易时段生成股票报告的应用程序,需要处理大量数据...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-09-java 中 7 种阻塞队列 BlockingQueue 概览篇
一些值得思考的问题
为什么要有阻塞队列?
什么是阻塞队列
优缺点
适用场景
实现思想+源码
个人启发
阻塞队列
什么是阻塞队列?
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-08-生产者消费者模式
生产者消费者模式
在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程、进程等)。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者。
这个属于基础模式,代码可以参考 轻松学习多线程-06-Producer Consumer 模式
缓冲区改良
单单抽象出生产者和消费者,还够不上是生产...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-07-CopyOnWriteArrayList 详解
问题
是什么?
有什么优缺点?
为什么性能高?原理是什么?
源码阅读
设计的启发
参考资料
《java 并发编程的艺术》
https://my.oschina.net/jielucky/blog/167198
https://blog.csdn.net/maoyuanming08...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-07-CopyOnWriteArraySet 入门使用及源码详解
问题
是什么?
有什么优缺点?
为什么性能高?原理是什么?
源码阅读
设计的启发
CopyOnWriteArraySet
官方定义
CopyOnWriteArraySet 是一个使用内部CopyOnWriteArrayList进行所有操作的Set。
特性
因此,它具有相同的基本...
2019-01-18 03:21:15 |
Concurrency
-
JCIP-07-java 从零实现 CopyOnWriteHashMap
COW 的思想
思想的通用性
CopyOnWriteArrayList 和 CopyOnWriteArraySet 这种读写分离的思想是通用的。
今天就让我们用这种思想实现一个简单的工具:CopyOnWriteHashMap。
实践出真知
这个工具包都出来几十年了,还是用的人很少。
要学以致用,站在巨人的肩膀上,
自己实现一个 copyOnWriteMap
类定义
publ...
2019-01-18 03:21:15 |
Concurrency