Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LinkedBlockingQueue和addAll()_Java - Fatal编程技术网

Java LinkedBlockingQueue和addAll()

Java LinkedBlockingQueue和addAll(),java,Java,如果尝试将集合添加到阻塞队列时超出了该阻塞队列的剩余大小,会发生什么情况?到目前为止,我所阅读的文档中还不清楚这一点 LinkedBlockingQueue<Integer> foo = new LinkedBlockingQueue<Integer>(3); foo.add(1); foo.add(2); LinkedBlockingQueue<Integer> tenElements = new L

如果尝试将集合添加到阻塞队列时超出了该阻塞队列的剩余大小,会发生什么情况?到目前为止,我所阅读的文档中还不清楚这一点

     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);
LinkedBlockingQueue foo=新的LinkedBlockingQueue(3);
foo.add(1);
foo.add(2);

LinkedBlockingQueue TeneElements=一旦达到容量,队列中保留的新LinkedBlockingQueue元素应被消耗,否则将出现此异常:-

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)
如果队列已满,则抛出
非法状态异常
的状态文档:

如果可以在不违反容量限制的情况下立即将指定元素插入此队列,则在成功时返回
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);
}

我在我的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)

如果您想了解更多信息,请继续。

我认为提供元素的线程将阻塞,直到消耗了来自foo的某些元素,以便有空间插入。请尝试看看会发生什么?看看源代码?去找javadoc?这是正确的答案。实际上,我把add()和put()混淆了。没有“阻塞”putAll(),因此这不是问题。
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)