java中的Queue使用

Queue = 队列,就是一个:先进先出(FIFO) 的容器

Queue<String> queue = new LinkedList<>();

使用场景

  1. 多线程「生产者 - 消费者」
    一个线程往里面丢任务(生产)
    一个线程取出来执行(消费)
    比如:异步日志、异步上报、异步处理订单
    这是 Queue 最经典、最实用的场景。
  2. 线程池内部排队
    ThreadPoolExecutor 构造函数里必须传一个 BlockingQueue
    任务来了先丢队列
    线程池线程从队列取任务执行
    你天天用线程池,其实天天在用 Queue,只是没看见。
  3. 消息队列的本地简化版
    不想上 RabbitMQ / Kafka 太重
    用 ConcurrentLinkedQueue 或 ArrayBlockingQueue
    做本地轻量消息缓冲、削峰
  4. 广度优先遍历 BFS(算法)
    二叉树层序遍历
    图的最短路径
    迷宫搜索
    面试算法高频,必须用 Queue。
  5. 排队、限流、公平调度
    秒杀请求排队
    接口限流
    保证请求按顺序处理
  6. 事件 / 指令队列
    游戏技能释放队列
    客户端操作指令序列
    责任链模式的执行顺序
  7. 延迟任务(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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容