java写个生产者消费者
时间: 2023-11-18 20:54:36 浏览: 93
Java中的生产者消费者问题是一个经典的多线程同步问题。在这个问题中,有一个共享的缓冲区,生产者向缓冲区中添加数据,而消费者从缓冲区中取出数据。如果缓冲区已满,生产者必须等待,直到有空间可用。如果缓冲区为空,消费者必须等待,直到有数据可用。
以下是一个简单的Java生产者消费者示例程序,其中有两个生产者和一个消费者,缓冲区容量为10,使用栈实现,并具有同步功能,可以防止先消费后生产的情况:
```
import java.util.Stack;
public class ProducerConsumerExample {
private Stack<Integer> buffer = new Stack<>();
private int maxSize = 10;
public void produce() throws InterruptedException {
int value = 0;
while (true) {
synchronized (this) {
while (buffer.size() == maxSize) {
wait();
}
System.out.println("Producer produced-" + value);
buffer.push(value++);
notify();
Thread.sleep(1000);
}
}
}
public void consume() throws InterruptedException {
while (true) {
synchronized (this) {
while (buffer.isEmpty()) {
wait();
}
int val = buffer.pop();
System.out.println("Consumer consumed-" + val);
notify();
Thread.sleep(1000);
}
}
}
}
```
在这个示例程序中,生产者使用`produce()`方法向缓冲区中添加数据,消费者使用`consume()`方法从缓冲区中取出数据。在`produce()`和`consume()`方法中,使用`synchronized`关键字来确保线程安全。如果缓冲区已满,生产者线程将等待,直到有空间可用。如果缓冲区为空,消费者线程将等待,直到有数据可用。在生产者向缓冲区中添加数据或消费者从缓冲区中取出数据后,使用`notify()`方法来通知等待的线程。
阅读全文