package J20250801.homework.demo01; import java.util.LinkedList; import java.util.Queue; /** * @author WanJl * @version 1.0 * @title OrderQueue * @description * @create 2025/8/1 */ public class OrderQueue { private static final int MAX_CAPACITY=10; //最大容量 //队列 private Queue queue=new LinkedList<>(); /** * 生产者向订单队列(缓冲区)放入订单的方法 * @param order */ public synchronized void put(Order order) throws InterruptedException { //满队列---等待 while (queue.size()==MAX_CAPACITY){ System.out.println("【队列满】商家等待中...."); wait(); } //添加订单 queue.offer(order); System.out.println("【生成订单】"+order.getType()+"订单,当前队列容量是"+queue.size()); //通知消费者消费---唤醒消费者 notifyAll(); } /** * 消费者从订单队列(缓冲区)取出订单的方法 * @return */ public synchronized Order take() throws InterruptedException { //空队列等待 while (queue.isEmpty()){ System.out.println("【队列空】骑手等待中...."); wait(); } //如果队列不空 Order order = queue.poll(); System.out.println("【处理订单】"+order.getType()+"订单,当前队列容量是"+queue.size()); //通知生产者生产订单---唤醒生产者线程 notifyAll(); return order; } /** * 获取缓冲区的大小,订单队列的长度 * @return */ public synchronized int size(){ return queue.size(); } }