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