java 生产者消费者
时间: 2023-11-13 21:56:25 浏览: 90
生产者消费者问题是一个经典的多线程同步问题,主要涉及到两个角色:生产者和消费者,以及一个共享的缓冲区。生产者向缓冲区中生产数据,消费者从缓冲区中消费数据。为了保证生产者和消费者之间的同步,需要使用锁或信号量等机制来实现。
在 Java 中,可以使用 wait()、notify() 和 notifyAll() 方法来实现线程之间的同步。具体实现方式如下:
```java
public class ProducerConsumer {
private List<Integer> buffer = new ArrayList<>();
private int maxSize = 10;
public synchronized void produce() throws InterruptedException {
while (buffer.size() == maxSize) {
wait();
}
Random random = new Random();
int num = random.nextInt(100);
buffer.add(num);
System.out.println("Produced: " + num);
notifyAll();
}
public synchronized void consume() throws InterruptedException {
while (buffer.size() == 0) {
wait();
}
int num = buffer.remove(0);
System.out.println("Consumed: " + num);
notifyAll();
}
}
```
在上面的代码中,使用了 synchronized 关键字来保证线程之间的同步。在 produce() 和 consume() 方法中,使用了 while 循环来判断缓冲区是否已满或已空,如果是,则调用 wait() 方法使线程进入等待状态。当生产者向缓冲区中添加数据时,调用 notifyAll() 方法唤醒所有等待的线程;当消费者从缓冲区中取出数据时,同样调用 notifyAll() 方法唤醒所有等待的线程。
阅读全文