使用阻塞列队LinkedBlockingQueue<E>实现生产者消费者程序。
时间: 2024-06-12 13:09:52 浏览: 83
阻塞队列实现生产者消费者模式Java开发Java经验技巧共
5星 · 资源好评率100%
生产者消费者问题通常用于解决多线程环境下的数据共享和同步问题。阻塞队列是一个很好的解决方案,其中LinkedBlockingQueue是一个线程安全的队列实现。
以下是使用阻塞队列LinkedBlockingQueue实现生产者消费者程序的示例代码:
```java
import java.util.concurrent.LinkedBlockingQueue;
class Producer implements Runnable {
private LinkedBlockingQueue<Integer> queue;
public Producer(LinkedBlockingQueue<Integer> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
for (int i = 1; i <= 10; i++) {
System.out.println("Produced: " + i);
queue.put(i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Consumer implements Runnable {
private LinkedBlockingQueue<Integer> queue;
public Consumer(LinkedBlockingQueue<Integer> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
while (true) {
Integer value = queue.take();
System.out.println("Consumed: " + value);
Thread.sleep(2000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class ProducerConsumerExample {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
Thread producerThread = new Thread(new Producer(queue));
Thread consumerThread = new Thread(new Consumer(queue));
producerThread.start();
consumerThread.start();
}
}
```
在上面的示例中,我们创建了一个生产者线程和一个消费者线程,它们共享一个阻塞队列LinkedBlockingQueue。生产者线程往队列中放入数据,消费者线程从队列中取出数据。
阅读全文