如果尝试向阻塞队列添加超过阻塞队列剩余大小的集合,会发生什么?从我目前阅读的文档中并不清楚这一点。
LinkedBlockingQueue<Integer> foo = new LinkedBlockingQueue<Integer>(3);
foo.add(1);
foo.add(2);
LinkedBlockingQueue<Integer> tenElements = new LinkedBlockingQueue<Integer(10);
for(int i = 0; i < 10; i++)
tenElements.add(i);
foo.addAll(collectionWith10elements);
Run Code Online (Sandbox Code Playgroud)
如果队列已满则抛出add()
an的状态文档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);
}
Run Code Online (Sandbox Code Playgroud)
您将收到以下异常:
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)
Run Code Online (Sandbox Code Playgroud)