java线程并发blockingqueue类使用示例


当然,我可以给你一个简单的Java线程并发`BlockingQueue`类的使用示例。在这个示例中,我们将使用`ArrayBlockingQueue`作为`BlockingQueue`的实现,并展示如何在生产者线程和消费者线程之间共享数据。


import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class BlockingQueueExample {

    // 创建一个容量为10的ArrayBlockingQueue
    private static final BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10);

    // 生产者线程
    static class Producer implements Runnable {
        @Override
        public void run() {
            int value = 0;
            try {
                while (true) {
                    // 模拟数据生产
                    System.out.println("Producing " + value);
                    queue.put(value);
                    value++;
                    // 为了演示,这里让生产者线程暂停一下
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt(); // 重新设置中断状态
                System.out.println("Producer interrupted");
            }
        }
    }

    // 消费者线程
    static class Consumer implements Runnable {
        @Override
        public void run() {
            try {
                while (true) {
                    // 从队列中取出数据
                    Integer take = queue.take();
                    System.out.println("Consuming " + take);
                    // 为了演示,这里让消费者线程暂停一下
                    Thread.sleep(2000);
                }
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt(); // 重新设置中断状态
                System.out.println("Consumer interrupted");
            }
        }
    }

    public static void main(String[] args) {
        // 创建并启动生产者线程
        Thread producer = new Thread(new Producer());
        producer.start();

        // 创建并启动消费者线程
        Thread consumer = new Thread(new Consumer());
        consumer.start();
    }
}

在这个示例中,我们定义了两个静态内部类`Producer`和`Consumer`,分别实现了`Runnable`接口作为生产者线程和消费者线程。`Producer`线程不断地向`BlockingQueue`中添加整数,而`Consumer`线程则不断地从队列中取出整数。我们使用`ArrayBlockingQueue`作为`BlockingQueue`的实现,并设置了容量为10。

请注意,这只是一个基本的示例,用于展示`BlockingQueue`在并发编程中的使用。在实际应用中,你可能需要根据具体的需求对代码进行适当的修改和扩展。