Java中的ArrayBlockingQueue add()方法
ArrayBlockingQueue 是一个有限制的阻塞队列,它在内部通过一个数组来维护元素。
- ArrayBlockingQueue 类是Java集合框架的一部分。
- 有限制意味着它具有固定大小,您不能存储超出队列容量的元素。
- 该队列还遵循FIFO(先进先出)规则,用于存储和从队列中删除元素。
- 如果您尝试将一个元素放入到满队列中或从空队列中取出一个元素,那么队列将会阻塞您。
add (E e) 方法将作为参数传递的元素插入到此队列的 尾部。 如果添加元素超出队列容量,则该方法将抛出IllegalStateException异常。如果元素添加成功,则此方法返回true,否则将抛出IllegalStateException异常。
语法:
public boolean add(E e)
参数:
e – 要添加到队列中的元素。
返回值:
如果添加成功,则返回true。
抛出:
IllegalStateException – 如果此队列已满
NullPointerException – 如果指定的元素为null
示例1
下面的程序说明了向ArrayBlockingQueue添加元素。
// Java程序演示ArrayBlockingQueue的add(E e)方法
//导入java.util.ArrayList和java.util.concurrent.ArrayBlockingQueue。
public class GFG {
public static void main(String[] args)
{
//定义ArrayBlockingQueue的容量
int capacity = 10;
// 创建ArrayBlockingQueue对象
ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(capacity);
// 向ArrayBlockingQueue添加元素
queue.add(23);
// 添加操作后打印队列
System.out.println("添加23之后");
System.out.println(queue);
// 再添加更多数字
queue.add(32);
queue.add(45);
queue.add(12);
// 添加操作后打印队列
System.out.println("添加32、45、12之后");
System.out.println(queue);
// 再添加更多数字
queue.add(27);
queue.add(67);
// 添加操作后打印队列
System.out.println("添加27、67之后");
System.out.println(queue);
}
}
输出:
添加23之后
[23]
添加32、45、12之后
[23, 32, 45, 12]
添加27、67之后
[23, 32, 45, 12, 27, 67]
示例2
下面的程序说明了向ArrayBlockingQueue添加元素和在队列已满时抛出异常。
// Java程序演示了ArrayBlockingQueue的add(E e)方法。
// Java Program to Demonstrate add(E e) method
import java.util.ArrayList;
import java.util.concurrent.ArrayBlockingQueue;
public class GFG {
public static void main(String[] args)
{
// 定义ArrayBlockingQueue的容量为5个元素。
int capacity = 5;
// 创建ArrayBlockingQueue对象
ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(capacity);
// 向ArrayBlockingQueue中添加5个元素。
queue.add(23);
queue.add(32);
queue.add(45);
queue.add(12);
queue.add(27);
// 添加元素后打印队列。
System.out.println("添加5个元素到队列后");
System.out.println(queue);
// 检查队列是否已满。
if (queue.remainingCapacity() == 0) {
System.out.println("队列已满");
}
else {
System.out.println("队列未满");
}
// 尝试添加更多的元素。
// 如果抛出异常,则打印异常。
try {
Boolean response = queue.add(27);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
输出:
添加5个元素到队列后
[23, 32, 45, 12, 27]
队列已满
java.lang.IllegalStateException: Queue full
at java.util.AbstractQueue.add(Unknown Source)
at java.util.concurrent.ArrayBlockingQueue.add(Unknown Source)
at defaultpackage.GFG.main(GFG.java:38)
参考:
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ArrayBlockingQueue.html#add(E)
极客教程