虚拟机生产者消费者模型代码实现
时间: 2023-10-07 10:04:18 浏览: 107
Producer产生一个数字而Consumer消费这个数字.rar_java 多线程_producer.java_生产者消费者_
以下是一个简单的虚拟机生产者消费者模型的代码实现,使用Java语言编写:
```java
import java.util.LinkedList;
public class VirtualMachine {
private LinkedList<Integer> buffer = new LinkedList<>();
private int capacity;
public VirtualMachine(int capacity) {
this.capacity = capacity;
}
public void produce(int value) throws InterruptedException {
synchronized (this) {
while (buffer.size() == capacity) {
wait();
}
buffer.add(value);
notify();
}
}
public int consume() throws InterruptedException {
synchronized (this) {
while (buffer.size() == 0) {
wait();
}
int value = buffer.removeFirst();
notify();
return value;
}
}
}
```
在这个例子中,`VirtualMachine`类表示一个虚拟机,它有一个缓冲区`buffer`,用于存储生产者生产的数据。缓冲区的容量由构造函数参数`capacity`指定。
生产者通过`produce`方法将数据添加到缓冲区中,消费者通过`consume`方法从缓冲区中取出数据。如果缓冲区已满,生产者将会等待,直到有空间可用。如果缓冲区为空,消费者将会等待,直到有数据可用。
在`produce`和`consume`方法中,使用`synchronized`关键字来确保线程安全。`wait`和`notify`方法用于线程间的通信,当等待条件不满足时,线程会进入等待状态,直到被通知条件已经满足为止。
使用这个虚拟机模型可以实现多线程的数据交换,例如生产者可以将数据写入缓冲区,消费者可以从缓冲区中读取数据,并且在生产者和消费者之间会自动处理线程同步和互斥的问题。
阅读全文