wait notify 实现消费者生产者
时间: 2023-09-30 20:13:03 浏览: 116
功能实现-生产者与消费者项目演示
好的,下面是一个简单的使用wait()和notify()实现的生产者-消费者模型:
``` java
public class ProducerConsumer {
private List<Integer> buffer = new ArrayList<>();
private int maxSize = 5;
public synchronized void produce() throws InterruptedException {
while (buffer.size() == maxSize) {
wait();
}
int item = new Random().nextInt();
buffer.add(item);
System.out.println("Produced: " + item);
notify();
}
public synchronized void consume() throws InterruptedException {
while (buffer.size() == 0) {
wait();
}
int item = buffer.remove(0);
System.out.println("Consumed: " + item);
notify();
}
}
```
在上述代码中,`buffer`是一个用来存储生产者生产的数据的缓冲区,`maxSize`是缓冲区的最大大小,`produce()`和`consume()`分别表示生产者和消费者的行为。在`produce()`和`consume()`方法中,使用了`wait()`和`notify()`方法来实现线程的等待和唤醒。
在生产者线程中,如果缓冲区已满,就让线程等待(调用`wait()`方法)。如果缓冲区不满,就生产一个随机数,并且将其加入缓冲区中,然后唤醒等待的消费者线程(调用`notify()`方法)。
在消费者线程中,如果缓冲区为空,就让线程等待(调用`wait()`方法)。如果缓冲区不为空,就从缓冲区中取出一个数据,并且将其打印出来,然后唤醒等待的生产者线程(调用`notify()`方法)。
注意,以上代码仅作为示例,是一个比较简单的实现。在实际生产环境中,可能需要更加完善的实现方式来保证线程安全和性能。
阅读全文