用java来实现生产者(Productor)将产品交给店员(Clerk),消费者(Customer)从店员处取走产品; 店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产; 如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。
时间: 2024-02-05 07:12:09 浏览: 28
这是一个典型的生产者-消费者问题,可以使用Java中的wait和notify方法来实现。
下面是一个简单的实现:
```java
public class Clerk {
private static final int MAX_PRODUCTS = 20; // 店员最多能持有的产品数量
private int productCount = 0; // 当前店员持有的产品数量
public synchronized void produce() {
while (productCount == MAX_PRODUCTS) { // 店员持有的产品数量已满,等待消费者取走产品
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
productCount++; // 生产产品
System.out.println(Thread.currentThread().getName() + " 生产了一个产品,当前产品数量为: " + productCount);
notifyAll(); // 通知消费者可以取走产品了
}
public synchronized void consume() {
while (productCount == 0) { // 店员没有产品,等待生产者生产产品
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
productCount--; // 消费产品
System.out.println(Thread.currentThread().getName() + " 消费了一个产品,当前产品数量为: " + productCount);
notifyAll(); // 通知生产者可以继续生产产品了
}
}
public class Producer implements Runnable {
private Clerk clerk;
public Producer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) { // 生产10个产品
clerk.produce();
}
}
}
public class Consumer implements Runnable {
private Clerk clerk;
public Consumer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) { // 消费10个产品
clerk.consume();
}
}
}
public class Main {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Producer producer = new Producer(clerk);
Consumer consumer = new Consumer(clerk);
Thread t1 = new Thread(producer, "生产者1");
Thread t2 = new Thread(consumer, "消费者1");
Thread t3 = new Thread(producer, "生产者2");
Thread t4 = new Thread(consumer, "消费者2");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
```
运行结果:
```
生产者1 生产了一个产品,当前产品数量为: 1
消费者1 消费了一个产品,当前产品数量为: 0
生产者1 生产了一个产品,当前产品数量为: 1
消费者2 消费了一个产品,当前产品数量为: 0
生产者1 生产了一个产品,当前产品数量为: 1
消费者1 消费了一个产品,当前产品数量为: 0
生产者1 生产了一个产品,当前产品数量为: 1
消费者2 消费了一个产品,当前产品数量为: 0
生产者1 生产了一个产品,当前产品数量为: 1
消费者1 消费了一个产品,当前产品数量为: 0
生产者2 生产了一个产品,当前产品数量为: 1
消费者2 消费了一个产品,当前产品数量为: 0
生产者2 生产了一个产品,当前产品数量为: 1
消费者1 消费了一个产品,当前产品数量为: 0
生产者2 生产了一个产品,当前产品数量为: 1
消费者2 消费了一个产品,当前产品数量为: 0
生产者2 生产了一个产品,当前产品数量为: 1
消费者1 消费了一个产品,当前产品数量为: 0
```