某蛋糕店有3位师傅,店外有5位顾客商店内最多存放10个蛋糕,顾客不断购买蛋糕,货架上的蛋糕卖完了,顾客需要等待,直到师傅把蛋糕做好,Java高级程序设计
时间: 2024-09-28 19:13:11 浏览: 23
在Java中,你可以通过模拟这个场景来创建一个简单的并发控制模型。我们可以设计一个类`CakeShop`,包含三个`CakeMaker`师傅和一个`CakeInventory`库存管理器。当顾客到来时,可以用`synchronized`关键字保证线程安全地添加到队列中,师傅们则从队列中取出任务并制作蛋糕。
```java
import java.util.LinkedList;
import java.util.Queue;
class Cake {
// 省略蛋糕的相关属性和构造方法...
}
class CakeMaker implements Runnable {
private Queue<Cake> queue;
public CakeMaker(Queue<Cake> queue) {
this.queue = queue;
}
@Override
public void run() {
while (!queue.isEmpty()) {
synchronized (queue) {
if (queue.size() > 10) {
try {
queue.wait(); // 当超过容量时,让当前线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
// 制作蛋糕并减少库存
queue.poll().finishMaking(); // 假设每个蛋糕有一个finishMaking方法
System.out.println("Cake made by " + Thread.currentThread().getName());
}
}
}
}
}
class Customer {
// 客户购买蛋糕,放到队列中...
}
public class CakeShop {
private final Queue<Cake> inventory = new LinkedList<>();
private final Thread[] makers = new Thread[3];
public CakeShop() {
for (int i = 0; i < makers.length; i++) {
makers[i] = new Thread(new CakeMaker(inventory));
makers[i].start();
}
}
// 其他方法如接单、顾客处理等...
public static void main(String[] args) {
CakeShop shop = new CakeShop();
// 测试部分,创建顾客对象并触发购买动作...
}
}
```
阅读全文