Toasobi
充电桩与电动车(场景题:生产消费)
本文最后更新于2023年10月11日,已超过449天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
题意如下:
有两个充电速度不一样的充电桩,有几辆汽车过来充电,汽车的充电时间不等,请模拟该过程
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();
}
}
}
你的文章内容非常卖力,让人点赞。 http://www.55baobei.com/km4bHkoOQ6.html
《爱意暗涌》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/134006.html
你的文章让我感受到了正能量,非常棒! https://www.4006400989.com/qyvideo/44241.html
你的文章让我感受到了生活的美好,谢谢! http://www.55baobei.com/EOcGTRtZeK.html