当前位置: 首页 > article >正文

java基于数组实现队列(二)

概述

实现上一篇博客中提到的

当前的实现中,入队时,如果队列已满则入队失败,能不能不要立刻返回失败,而是等一段时间看是否有出队操作,如果发生了出队,不就可以入队了?怎么实现?(1)

实现

改造offer()

	public void offerV2(int value) {
        lock.lock();
        while (tail == capacity) { //队列放满了 死循环一直等到至少一次出队操作完成 这时不就可以入队成功了?
            log.info("元素 {} 入队失败 因为队列放满了 等到至少一次出队操作后才可以入队成功", value);
        }
        try {
            arr[tail] = value;
            log.info("元素 {}入队成功",value);
            tail++;
        }finally {
            lock.unlock();
        }

    }

测试用例

	public static void main(String[] args) throws InterruptedException {
        ArrayQueue queue = new ArrayQueue(3);

        Thread t1 = new Thread(() -> {
            queue.offerV2(1);
            queue.offerV2(2);
        }, "t1");

        Thread t2 = new Thread(() -> {
            queue.offerV2(3);
        }, "t2");

        Thread t3 = new Thread(() -> {
            queue.offerV2(4);
        }, "t3");

        t1.start();
        t2.start();
        t3.start();

        //25ms以后执行一次出队操作 由于发生了出队操作 入队操作就应该可以成功
        log.info("25ms以后执行一次出队操作");
        TimeUnit.MILLISECONDS.sleep(25);
        int polled = queue.poll();
        log.info("出队的元素:{}",polled);

        // t1 t2 t3 3个线程的代码都执行完后再遍历队列
        t1.join();
        t2.join();
        t3.join();
        
        queue.print();

    }

测试用例输出

测试用例输出1
测试用例输出2

扩展

1.可以不用循环实现吗?有其他实现方法吗?

扩展1
2.实现

当前的实现中,出队时,如果队列为空则提示队列为空,能不能不要立刻提示队列为空,而是等一段时间看是否有入队操作,如果有入队,不就可以出队了?怎么实现?

这个感兴趣的朋友可以自己实现下。

最后

好了,如果对你有帮助的话,欢迎点个免费的赞哦。


http://www.kler.cn/a/557475.html

相关文章:

  • 解决双系统开机显示gnu grub version 2.06 Minimal BASH Like Line Editing is Supported
  • 计算机网络————(一)HTTP讲解
  • Maven 构建中的安全性与合规性检查
  • Android SoundTrigger架构学习
  • 0基础学前端-----CSS DAY13
  • VR疗法的新突破——王博如何用技术帮助心理康复
  • STM32单片机芯片与内部95 STM32F429系列 架构 启动 供电 时钟
  • 14.5 Auto-GPT:基于Agent的AGI实验如何重新定义人工智能未来?
  • 阿里云ECS命名规则解析与规格选型实战指南
  • 番茄工作法html实现
  • 特征提取:如何从不同模态中获取有效信息?
  • Linux第十二节 — 进程概念详解 + 操作系统引入
  • 第二课 — 读取按钮状态用以控制LED闪烁
  • 【JavaScript进阶】构造函数数据常用函数
  • [ Vim ] 常用命令 and 配置
  • 从0开始:OpenCV入门教程【图像处理基础】
  • open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题
  • 记录一下_treafik使用Gateway-APi使用的细节参数
  • [ComfyUI]Recraft贴图开源方案,实现服装印花自由
  • P2865 [USACO06NOV] Roadblocks G 与最短路的路径可重复的严格次短路