/*
* 多线程之间交互
* 线程阀是一种线程与线程之间相互制约和交互的机制
*
*
* 阻塞队列BlockingQueue
*
* Queue 队列:先进显出
* Deque 双端队列:两端都可以进出的队列,当约束一端的时候就成了栈结构
*
* 阻塞队列 BlockingQueue 是一个支持两个附加操作的队列
* 在队列为空时,获取元素的线程会等待队列变为非空
* 当队列满时:存储元素的线程会等队列可用
*
* 阻塞队列常用于生产者和消费者的场景
*/
public static void main(String[] args) {
/*
* 数组阻塞队列
* 典型的有界缓存区
*/
ArrayBlockingQueue<Object> arrayBlockingQueue = new ArrayBlockingQueue<>(1);
/*
* 链表阻塞队列
*/
LinkedBlockingDeque<Object> linkedBlockingDeque = new LinkedBlockingDeque<>();
//优先级阻塞队列 支持优先级排序的无界队列
// 优先级的判断痛殴构造函数传入的compator对象决定
// 不会阻塞数据的生产者,只会没有可消费的数据时,阻塞数据的消费者
// 生产者速度快于消费者速度,时间一长,会耗尽所有的可用堆内存空间
// 内部控制线程同步的锁采用的是公平锁
PriorityBlockingQueue<Object> priorityBlockingQueue = new PriorityBlockingQueue<>();
// 延时队列
// 缓存系统的设计
// 定时任务调度
// 作为delayqueue元素的时候必须实现delayed接口的两个方法
DelayQueue<Delayed> delayQueue = new DelayQueue<>();
// 同步队列
// 是一个不存储元素的阻塞队列,每一个put操作必须等待一个take操作,否则不能继续添加元素,
// 负责传递数据,
// 本身不存任何元素
// 两种机制
// 公平模式 :阻塞多余的生产和消费者
// 非公平模式:很容易出现饥渴现象
SynchronousQueue<Object> synchronousQueue = new SynchronousQueue<>();
// 链表双向阻塞队列
LinkedBlockingDeque<Object> linkedBlockingDeque2 = new LinkedBlockingDeque<>();
// 链表传输队列
// 是一个由链表结构组成的无界传输阻塞队列
// 双重数据结构
// 方法都是通过两个步骤完成:保留与完成
LinkedTransferQueue<Object> linkedTransferQueue = new LinkedTransferQueue<>();
这些都没用过,也没见人用过,项目中用的是redis队列
就当是了解了吧,