Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java 阻塞队列

作者:放电的牛   发布日期:2025-12-07   浏览:82

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

public class BlockingQueueExample {
    public static void main(String[] args) {
        // 创建一个容量为 5 的阻塞队列
        BlockingQueue<String> queue = new ArrayBlockingQueue<>(5);

        // 生产者线程
        Thread producerThread = new Thread(() -> {
            try {
                for (int i = 0; i < 10; i++) {
                    String message = "Message-" + i;
                    System.out.println("Producing: " + message);
                    queue.put(message); // 如果队列满了,put() 会阻塞直到有空位
                    Thread.sleep(1000); // 模拟生产时间
                }
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        // 消费者线程
        Thread consumerThread = new Thread(() -> {
            try {
                for (int i = 0; i < 10; i++) {
                    String message = queue.take(); // 如果队列为空,take() 会阻塞直到有元素
                    System.out.println("Consuming: " + message);
                    Thread.sleep(2000); // 模拟消费时间
                }
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        });

        // 启动生产者和消费者线程
        producerThread.start();
        consumerThread.start();

        // 等待线程结束
        try {
            producerThread.join();
            consumerThread.join();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

解释说明:

  • BlockingQueue:Java 提供的线程安全的队列接口,支持在队列满时插入操作会阻塞,队列空时移除操作也会阻塞。
  • ArrayBlockingQueue:实现了 BlockingQueue 接口的一个固定大小的队列。当队列满时,put() 方法会阻塞,直到队列中有空位;当队列空时,take() 方法会阻塞,直到队列中有元素。
  • 生产者线程:通过 queue.put() 方法将消息放入队列中,如果队列已满,则该方法会阻塞,直到有空位为止。
  • 消费者线程:通过 queue.take() 方法从队列中取出消息,如果队列为空,则该方法会阻塞,直到队列中有元素为止。
  • 线程同步:生产者和消费者线程通过阻塞队列实现同步,确保生产者不会在队列满时继续生产,消费者也不会在队列空时继续消费。

上一篇:java获取当前年月

下一篇:java匿名内部类

大家都在看

java判断是windows还是linux

java连接数据库的代码

java djl

ubuntu 卸载java

es java api

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站