在 Java 中使用示例封锁阻塞队列 add() 方法
封锁阻塞队列 中的 add(E e) 方法将传递的元素插入到队列的结尾,如果有空间。如果阻塞队列的容量受限且没有剩余空间可插入,则返回 IllegalStateException 。它的工作方式与 addLast() 方法完全相同。
语法:
public void add(E e)
参数: 此方法接受一个强制性参数 e ,该参数是要插入到封锁阻塞队列尾部的元素。
返回: 此方法不返回任何内容。
异常:
- IllegalStateException :如果由于容量限制,此时无法添加元素。
- NullPointerException :如果指定的元素为空。
注: 封锁阻塞队列的 add() 方法是从 Java 中的 LinkedBlockingDeque 类继承而来。
以下程序说明了 Deque 的 add() 方法:
程序 1:
// Java Program Demonstrate add()
// method of BlockingDeque
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.BlockingDeque;
import java.util.*;
public class GFG {
public static void main(String[] args)
throws IllegalStateException
{
// create object of BlockingDeque
BlockingDeque<Integer> BD
= new LinkedBlockingDeque<Integer>();
// Add numbers to end of BlockingDeque
BD.add(7855642);
BD.add(35658786);
BD.add(5278367);
BD.add(74381793);
// before removing print queue
System.out.println("Blocking Deque: " + BD);
}
}
封锁阻塞队列: [7855642, 35658786, 5278367, 74381793]
程序 2:
// Java Program Demonstrate add()
// method of BlockingDeque
// 当它已满时
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.BlockingDeque;
import java.util.*;
public class GFG {
public static void main(String[] args)
throws IllegalStateException
{
// create object of BlockingDeque
// size of list
BlockingDeque<Integer> BD
= new LinkedBlockingDeque<Integer>(3);
// Add numbers to end of BlockingDeque
BD.add(7855642);
BD.add(35658786);
BD.add(5278367);
// it is full
BD.add(74381793);
// before removing print Deque
System.out.println("Blocking Deque: " + BD);
}
}
输出:
Exception in thread "main" java.lang.IllegalStateException: Deque full
at java.util.concurrent.LinkedBlockingDeque.addLast(LinkedBlockingDeque.java:335)
at java.util.concurrent.LinkedBlockingDeque.add(LinkedBlockingDeque.java:633)
at GFG.main(GFG.java:24)
程序 3:
// Java程序演示BlockingDeque的add()方法插入null时的情况
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.BlockingDeque;
import java.util.*;
public class GFG {
public static void main(String[] args)
throws IllegalStateException
{
// 创建BlockingDeque对象
BlockingDeque<Integer> BD
= new LinkedBlockingDeque<Integer>();
// 向BlockingDeque末尾添加数字
BD.add(7855642);
BD.add(35658786);
BD.add(5278367);
// 插入null
BD.add(null);
// 删除前打印Deque
System.out.println("Blocking Deque: " + BD);
}
}
输出:
Exception in thread "main" java.lang.NullPointerException
at java.util.concurrent.LinkedBlockingDeque.offerLast(LinkedBlockingDeque.java:357)
at java.util.concurrent.LinkedBlockingDeque.addLast(LinkedBlockingDeque.java:334)
at java.util.concurrent.LinkedBlockingDeque.add(LinkedBlockingDeque.java:633)
at GFG.main(GFG.java:23)
参考文献: https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingDeque.html#add(E)
极客教程