在数据结构的学习中我们知道队列是一种先进先出的数据结构, 但是存在一些特殊的队列, 比如: 优先级队列(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);