LinkedBlockingQueue 实例项目
时间: 2023-07-21 07:00:35 浏览: 120
java线程池实例
5星 · 资源好评率100%
一个使用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("Producing: " + i);
queue.put(i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
class Consumer implements Runnable {
private LinkedBlockingQueue<Integer> queue;
public Consumer(LinkedBlockingQueue<Integer> queue) {
this.queue = queue;
}
@Override
public void run() {
try {
while (true) {
int value = queue.take();
System.out.println("Consuming: " + value);
Thread.sleep(2000);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
public class LinkedBlockingQueueExample {
public static void main(String[] args) {
LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(5);
Producer producer = new Producer(queue);
Consumer consumer = new Consumer(queue);
Thread producerThread = new Thread(producer);
Thread consumerThread = new Thread(consumer);
producerThread.start();
consumerThread.start();
}
}
```
这个示例中,我们创建了一个LinkedBlockingQueue对象,并且限制它的容量为5。然后,创建了一个生产者线程和一个消费者线程,它们分别通过put()和take()方法向队列中添加和移除元素。生产者线程每隔1秒生产一个数字并放入队列中,消费者线程每隔2秒从队列中消费一个数字。通过使用LinkedBlockingQueue,我们可以实现线程之间的安全数据交换,生产者和消费者可以自动阻塞和唤醒,以实现正确的生产和消费顺序。
阅读全文