TypechoJoeTheme

Toasobi的博客

充电桩与电动车(场景题:生产消费)

本文最后更新于2023年10月11日,已超过341天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
题意如下:
有两个充电速度不一样的充电桩,有几辆汽车过来充电,汽车的充电时间不等,请模拟该过程
public class produceCoustomer {


    // 定义一个汽车类,包含汽车的编号和充电时间
    class Car {
        private int id; // 汽车编号
        private int chargeTime; // 充电时间,单位为秒

        public Car(int id, int chargeTime) {
            this.id = id;
            this.chargeTime = chargeTime;
        }

        public int getId() {
            return id;
        }

        public int getChargeTime() {
            return chargeTime;
        }
    }

    // 定义一个充电桩类,实现Runnable接口,作为消费者线程
    class Charger implements Runnable {
        private String name; // 充电桩的名称
        private int speed; // 充电桩的速度,单位为秒/百分比
        private BlockingQueue<Car> queue; // 充电桩共享的队列,用于存放等待充电的汽车

        public Charger(String name, int speed, BlockingQueue<Car> queue) {
            this.name = name;
            this.speed = speed;
            this.queue = queue;
        }

        @Override
        public void run() {
            while (true) {
                try {
                    // 从队列中取出一辆汽车,如果队列为空,则阻塞等待
                    Car car = queue.take();
                    System.out.println(name + "开始给汽车" + car.getId() + "充电");
                    // 根据充电桩的速度和汽车的充电时间,计算出需要的充电时长
                    int duration = car.getChargeTime() * speed / 100;
                    // 模拟充电过程,让线程休眠一段时间
                    TimeUnit.SECONDS.sleep(duration);
                    System.out.println(name + "完成给汽车" + car.getId() + "充电,用时" + duration + "秒");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }



    // 定义一个模拟类,作为主程序入口

        public static void main(String[] args) {
            produceCoustomer pc = new produceCoustomer();
            // 创建一个容量为2的阻塞队列,用于存放等待充电的汽车
            BlockingQueue<Car> queue = new ArrayBlockingQueue<>(2);
            // 创建两个充电桩对象,分别命名为快充和慢充,并指定它们的速度
            Charger slowCharger = pc.new Charger("慢充", 50, queue);
            Charger fastCharger = pc.new Charger("快充", 20, queue); //用时 = 汽车充电需要时间*0.2
            // 创建两个线程,分别执行快充和慢充的run方法
            Thread fastThread = new Thread(fastCharger);
            Thread slowThread = new Thread(slowCharger);
            // 启动两个线程
            fastThread.start();
            slowThread.start();
            // 创建8辆汽车对象,分别指定它们的编号和充电时间,并将它们放入队列中
            try {
                queue.put(pc.new Car(1, 10)); // 汽车1需要充10秒才能满电
                queue.put(pc.new Car(2, 15)); // 汽车2需要充15秒才能满电
                queue.put(pc.new Car(3, 12)); // 汽车3需要充12秒才能满电
                queue.put(pc.new Car(4, 8));  // 汽车4需要充8秒才能满电
                queue.put(pc.new Car(5, 20)); // 汽车5需要充20秒才能满电
                queue.put(pc.new Car(6, 18)); // 汽车6需要充18秒才能满电
                queue.put(pc.new Car(7, 16)); // 汽车7需要充16秒才能满电
                queue.put(pc.new Car(8, 14)); // 汽车8需要充14秒才能满电
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
}
朗读
赞(0)
评论 (0)