算法-03-Java 实现阻塞队列 字节三面算法题
package com.example.polaris; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class BlockedQueue<T> { private int size; private Object[] queue; final Lock lock = new ReentrantLock(); // 条件变量:队列不满 final Condition notFull = lock.newCondition(); // 条件变量:队列不空 final Condition notEmpty = lock.newCondition(); private int index; private int removeIndex; private int currLen; public BlockedQueue(int size) { this.index = 0; this.removeIndex = 0; this.currLen = 0; this.size = size; queue = new Object[size]; } // 入队 public void push(T element) throws InterruptedException { lock.lock(); try { while (currLen == size) { System.out.println("队列已满,等待队列不满"); notFull.await(); } queue[index] = element; if (++index == size) { index = 0; } currLen++; notEmpty.signal(); } finally { lock.unlock(); } } // 出对 public T pop() throws InterruptedException { lock.lock(); try { while (currLen == 0) { System.out.println("队列已空,等待队列不空"); notEmpty.await(); } Object obj = queue[removeIndex]; if (++removeIndex == size) { removeIndex = 0; } currLen--; notFull.signal(); return (T) obj; } finally { lock.unlock(); } } }
不要小瞧女程序员
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2019-07-19 13. VUE 组件之间数据传递