如果尝试将集合添加到阻止队列的过程超出了阻止队列的剩余大小,那么应该怎么办?从到目前为止我阅读的文档中还不清楚。
LinkedBlockingQueue<Integer> foo = new LinkedBlockingQueue<Integer>(3);
foo.add(1);
foo.add(2);
foo.addAll(collectionWith10elements);
答案 0 :(得分:5)
add()
的文档指出,如果队列已满,则会抛出IllegalStateException
:
如果可以立即将指定的元素插入此队列,而不会违反容量限制,则成功返回
true
,如果当前没有可用空间则抛出IllegalStateException
。
当您尝试以下代码时:
public static void main(String[] args) throws Exception {
ArrayList<Integer> l = new ArrayList<Integer>();
l.add(10);
l.add(20);
l.add(30);
l.add(40);
l.add(50);
LinkedBlockingQueue<Integer> foo = new LinkedBlockingQueue<Integer>(3);
foo.add(1);
foo.add(2);
foo.addAll(l);
}
您将收到以下异常:
Exception in thread "main" java.lang.IllegalStateException: Queue full
at java.util.AbstractQueue.add(AbstractQueue.java:98)
at java.util.AbstractQueue.addAll(AbstractQueue.java:187)
at Test.main(Test.java:16)
答案 1 :(得分:1)
持久存储在队列中的元素应在达到容量后被消耗掉,否则我们将得到此异常:-
Exception in thread "main" java.lang.IllegalStateException: Queue full
at java.util.AbstractQueue.add(AbstractQueue.java:98)
at java.util.AbstractQueue.addAll(AbstractQueue.java:187)
答案 2 :(得分:1)
我在IDE上对其进行了测试,并且得到了
Exception in thread "main" java.lang.IllegalStateException: Queue full
at java.util.AbstractQueue.add(AbstractQueue.java:98)
at java.util.AbstractQueue.addAll(AbstractQueue.java:187)
如果您想了解更多信息,请转到here。