用java模拟生产者消费者问题
时间: 2023-05-26 12:01:47 浏览: 112
C语言编程模拟生产者和消费者问题.pdf
可参考以下代码实现:
```java
public class ProducerConsumer {
private Queue<Integer> queue = new LinkedList<>();
private final int CAPACITY = 5;
private Random random = new Random();
public void produce() throws InterruptedException {
while (true) {
synchronized (this) {
while (queue.size() == CAPACITY) {
wait();
}
int num = random.nextInt(100);
queue.add(num);
System.out.println("Producer produced: " + num);
notifyAll();
Thread.sleep(1000);
}
}
}
public void consume() throws InterruptedException {
while (true) {
synchronized (this) {
while (queue.isEmpty()) {
wait();
}
int num = queue.remove();
System.out.println("Consumer consumed: " + num);
notifyAll();
Thread.sleep(1000);
}
}
}
}
```
这里使用了一个队列来存储数据,CAPACITY表示队列的最大容量,producer负责向队列中添加数据,consumer负责从队列中取出数据。
在produce()方法中,先通过synchronized(this)获取对象锁,然后判断队列是否已满,如果已满则等待,否则随机生成一个整数num加入到队列中,并输出提示信息。最后通过notifyAll()方法唤醒等待中的线程,并暂停一秒钟以便查看效果。
在consume()方法中也是先通过synchronized(this)获取对象锁,然后判断队列是否为空,如果为空则等待,否则从队列中取出一个整数num,并输出提示信息。最后通过notifyAll()方法唤醒等待中的线程,并暂停一秒钟以便查看效果。
阅读全文