阻塞队列(BlockingQueue)是一个线程安全的队列,支持阻塞的插入和移除操作。它常用于生产者-消费者问题等多线程环境中。
以下是一个简单的 Java 实现,展示了如何使用 BlockingQueue
来实现一个基本的阻塞队列示例
标签:java,Thread,队列,阻塞,value,线程,new From: https://blog.csdn.net/2301_79075954/article/details/141001444import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class BlockingQueueExample { // 创建一个容量为 10 的阻塞队列 private static final BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10); public static void main(String[] args) { // 启动生产者线程 Thread producer = new Thread(new Producer()); producer.start(); // 启动消费者线程 Thread consumer = new Thread(new Consumer()); consumer.start(); } static class Producer implements Runnable { @Override public void run() { int value = 0; try { while (true) { queue.put(value); System.out.println("Produced: " + value); value++; Thread.sleep(1000); // 模拟生产过程的时间 } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } static class Consumer implements Runnable { @Override public void run() { try { while (true) { Integer value = queue.take(); System.out.println("Consumed: " + value); Thread.sleep(1500); // 模拟消费过程的时间 } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } }
代码说明:
创建阻塞队列:
ArrayBlockingQueue
是一种基于数组的阻塞队列,容量为 10。生产者线程:
Producer
类实现了Runnable
接口,负责将数据放入队列中。使用queue.put(value)
方法将元素添加到队列,如果队列已满,则会阻塞,直到队列中有空间。消费者线程:
Consumer
类也实现了Runnable
接口,负责从队列中取出数据。使用queue.take()
方法从队列中取出元素,如果队列为空,则会阻塞,直到队列中有元素。启动线程:
- 在
main
方法中启动生产者和消费者线程,以便它们并发运行。运行结果:
生产者将生成的整数放入队列中,消费者从队列中取出并消费这些整数。生产者和消费者通过阻塞队列进行数据交换,这样即使生产速度和消费速度不同,也能保证数据的正确传递。