📌  相关文章
📜  Java中的 BlockingQueue add() 示例(1)

📅  最后修改于: 2023-12-03 14:42:44.708000             🧑  作者: Mango

Java中的 BlockingQueue add() 示例

简介

在 Java 中,BlockingQueue 是一个阻塞式的队列接口,官方文档中定义为:A Queue that additionally supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to become available in the queue when storing an element. 即,BlockingQueue 支持阻塞式的 take() 和 put() 操作,当队列为空或者队列已满时,调用这两个方法时会一直阻塞等待相应的事件发生,直到阻塞被解除。

在 BlockingQueue 接口中,add(E e) 是向队列中添加元素的操作,它会将元素添加到队列的尾部。如果队列已经满了,add() 操作将抛出一个异常(IllegalStateException 或者 IllegalArgumentException)。

代码示例
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class BlockingQueueDemo {
    public static void main(String[] args) throws InterruptedException {
        int capacity = 10;
        BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<>(capacity);

        // 添加元素到队列
        for (int i = 0; i < capacity + 1; i++) {
            try {
                blockingQueue.add(i);
                System.out.println("add " + i + " to blockingQueue");
            } catch (Exception e) {
                System.out.println("add " + i + " to blockingQueue failed: " + e.getClass().getName());
            }
        }
    }
}
返回结果

当 capacity + 1 个元素被添加到队列中后,add() 方法会抛出异常:

add 0 to blockingQueue
add 1 to blockingQueue
add 2 to blockingQueue
add 3 to blockingQueue
add 4 to blockingQueue
add 5 to blockingQueue
add 6 to blockingQueue
add 7 to blockingQueue
add 8 to blockingQueue
add 9 to blockingQueue
add 10 to blockingQueue failed: java.lang.IllegalStateException
总结

BlockingQueue 接口提供了一种阻塞式的队列操作,可以在队列为空或已满的情况下阻塞等待相应的事件。add() 方法是向队列中添加元素的操作,如果队列已经满了,则会抛出异常。在使用 BlockingQueue 接口时,需要注意队列容量的大小,避免队列已满导致的异常。