java 如何用队列实现生产者消费者模式
时间: 2024-01-18 18:02:44 浏览: 35
生产者消费者模式是一种常见的并发编程模型,队列可以作为其实现方式之一。Java中可以使用BlockingQueue来实现队列的功能,具体步骤如下:
1. 定义一个BlockingQueue对象作为生产者和消费者之间的缓冲区。
```
BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(10);
```
2. 定义一个生产者类,该类会不断地向队列中添加数据,直到队列满为止。
```
class Producer implements Runnable {
private BlockingQueue<Integer> queue;
public Producer(BlockingQueue<Integer> queue) {
this.queue = queue;
}
public void run() {
try {
while (true) {
int i = new Random().nextInt();
queue.put(i);
System.out.println("生产者生产数据:" + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
3. 定义一个消费者类,该类会不断地从队列中取出数据,直到队列为空为止。
```
class Consumer implements Runnable {
private BlockingQueue<Integer> queue;
public Consumer(BlockingQueue<Integer> queue) {
this.queue = queue;
}
public void run() {
try {
while (true) {
int i = queue.take();
System.out.println("消费者消费数据:" + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
4. 创建一个线程池,并启动生产者和消费者线程。
```
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(new Producer(queue));
executor.submit(new Consumer(queue));
```
这样就完成了生产者消费者模式的实现。生产者会不断地向队列中添加数据,消费者会不断地从队列中取出数据,当队列满时,生产者会阻塞等待,当队列为空时,消费者会阻塞等待。