小王学习录
- 今日鸡汤
- 阻塞队列
- 什么是阻塞队列
- 什么是生产者消费者模型
- 阻塞队列的使用
- 阻塞队列的代码实现
- 1. 实现一个普通队列
- 2. 在普通队列里加入阻塞特性
- 完善阻塞队列
- 消息队列
在数据结构的学习中我们知道队列是一种先进先出的数据结构, 但是存在一些特殊的队列, 比如: 优先级队列(Priority Queue), 阻塞队列和消息队列
今日鸡汤
一切伟大的行动和思想, 都有一个微不足道的开始
阻塞队列
什么是阻塞队列
相比于普通队列来说, 阻塞队列的特殊之处在于:
- 当队列中没有元素时执行出队的操作, 会使线程陷入阻塞. 直到另一个线程在队列里增加元素(使得队列不为空).
- 当队列已经满了还要往队列里增加元素时, 也会陷入阻塞
利用阻塞队列的特性, 可以实现一个生产者消费者模型
什么是生产者消费者模型
往队列里添加元素即为生产者, 从队列里拿出元素即为消费者, 使用生产者消费者模型有如下好处:
- 实现生产者和消费者间的解耦合
- 削峰填谷, 保证系统稳定性
阻塞队列的使用
我们知道在队列中, 入队是offer, 出队是poll. 而在阻塞队列中, 入队是put, 出队是take, 以下是阻塞队列的代码使用和运行结果
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;public class ThreadDome1 {public static void main(String[] args) {BlockingQueue<Integer> blockingQueue= new LinkedBlockingQueue<>();Thread consumer = new Thread(()->{while(true){try {int value = blockingQueue.take();System.out.println("消费元素为:" + value);} catch (InterruptedException e) {throw new RuntimeException(e);}}