LinkedBlockingQueue 和 addAll()

pai*_*ego 4 java

如果尝试向阻塞队列添加超过阻塞队列剩余大小的集合,会发生什么?从我目前阅读的文档中并不清楚这一点。

     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)

Pro*_*man 6

如果队列已满则抛出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)