Queue = 队列,就是一个:先进先出(FIFO) 的容器
Queue<String> queue = new LinkedList<>();
使用场景
- 多线程「生产者 - 消费者」
一个线程往里面丢任务(生产)
一个线程取出来执行(消费)
比如:异步日志、异步上报、异步处理订单
这是 Queue 最经典、最实用的场景。 - 线程池内部排队
ThreadPoolExecutor 构造函数里必须传一个 BlockingQueue
任务来了先丢队列
线程池线程从队列取任务执行
你天天用线程池,其实天天在用 Queue,只是没看见。 - 消息队列的本地简化版
不想上 RabbitMQ / Kafka 太重
用 ConcurrentLinkedQueue 或 ArrayBlockingQueue
做本地轻量消息缓冲、削峰 - 广度优先遍历 BFS(算法)
二叉树层序遍历
图的最短路径
迷宫搜索
面试算法高频,必须用 Queue。 - 排队、限流、公平调度
秒杀请求排队
接口限流
保证请求按顺序处理 - 事件 / 指令队列
游戏技能释放队列
客户端操作指令序列
责任链模式的执行顺序 - 延迟任务(DelayQueue)
订单超时未支付自动取消
验证码过期清理
延时消息
二叉树样例
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class BFSDemo {
public static void main(String[] args) {
// 构建和上面相同的树
TreeNode root = new TreeNode(1);
root.right = new TreeNode(3);
root.left = new TreeNode(2);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
// 执行BFS
List<Integer> res = bfs(root);
System.out.println("BFS遍历结果:" + res); // [1,2,3,4,5]
}
// BFS核心方法(队列实现)
private static List<Integer> bfs(TreeNode root) {
List<Integer> res = new ArrayList<>();
if (root == null) return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root); // 初始:根节点入队
while (!queue.isEmpty()) {
TreeNode node = queue.poll(); // 出队当前节点
res.add(node.val); // 访问当前节点
// 左子节点入队(先左后右,保证层级顺序)
if (node.left != null) queue.offer(node.left);
// 右子节点入队
if (node.right != null) queue.offer(node.right);
}
return res;
}
}