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<Order> 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();
    }
}
