OrderQueue.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package J20250801.homework.demo01;
  2. import java.util.LinkedList;
  3. import java.util.Queue;
  4. /**
  5. * @author WanJl
  6. * @version 1.0
  7. * @title OrderQueue
  8. * @description
  9. * @create 2025/8/1
  10. */
  11. public class OrderQueue {
  12. private static final int MAX_CAPACITY=10; //最大容量
  13. //队列
  14. private Queue<Order> queue=new LinkedList<>();
  15. /**
  16. * 生产者向订单队列(缓冲区)放入订单的方法
  17. * @param order
  18. */
  19. public synchronized void put(Order order) throws InterruptedException {
  20. //满队列---等待
  21. while (queue.size()==MAX_CAPACITY){
  22. System.out.println("【队列满】商家等待中....");
  23. wait();
  24. }
  25. //添加订单
  26. queue.offer(order);
  27. System.out.println("【生成订单】"+order.getType()+"订单,当前队列容量是"+queue.size());
  28. //通知消费者消费---唤醒消费者
  29. notifyAll();
  30. }
  31. /**
  32. * 消费者从订单队列(缓冲区)取出订单的方法
  33. * @return
  34. */
  35. public synchronized Order take() throws InterruptedException {
  36. //空队列等待
  37. while (queue.isEmpty()){
  38. System.out.println("【队列空】骑手等待中....");
  39. wait();
  40. }
  41. //如果队列不空
  42. Order order = queue.poll();
  43. System.out.println("【处理订单】"+order.getType()+"订单,当前队列容量是"+queue.size());
  44. //通知生产者生产订单---唤醒生产者线程
  45. notifyAll();
  46. return order;
  47. }
  48. /**
  49. * 获取缓冲区的大小,订单队列的长度
  50. * @return
  51. */
  52. public synchronized int size(){
  53. return queue.size();
  54. }
  55. }