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)