Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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 BlockingQueue拖进BlockingQueue?_Java_Concurrency_Synchronized_Blockingqueue - Fatal编程技术网

Java BlockingQueue拖进BlockingQueue?

Java BlockingQueue拖进BlockingQueue?,java,concurrency,synchronized,blockingqueue,Java,Concurrency,Synchronized,Blockingqueue,如果我有bq1.drainTo(bq2)其中bq1和bq2都是可从多个线程访问的BlockingQueues,我是否需要将排放与我必须bq2的任何其他读取/写入同步?如果是的话,这似乎在某种程度上从一开始就消除了阻塞队列的优势——有办法解决吗?若否,原因为何?如果有时,在什么情况下?您可以使用另一个blockingqueue来训练,但如果实际实现是有限制的(容量有限),那么如果bg2在排水过程中满了,将抛出异常,并且drainTo操作的状态将是未知的 我的问题不是抛出异常,而是在这个排水过程中是

如果我有
bq1.drainTo(bq2)
其中
bq1
bq2
都是可从多个线程访问的
BlockingQueue
s,我是否需要将排放与我必须
bq2
的任何其他读取/写入同步?如果是的话,这似乎在某种程度上从一开始就消除了
阻塞队列
的优势——有办法解决吗?若否,原因为何?如果有时,在什么情况下?

您可以使用另一个blockingqueue来训练,但如果实际实现是有限制的(容量有限),那么如果bg2在排水过程中满了,将抛出异常,并且drainTo操作的状态将是未知的

我的问题不是抛出异常,而是在这个排水过程中是否可以修改/访问
bq2
,以及是否需要同步排水语句以防止出现异常。如果不关心元素的顺序,则可以。BQ是线程安全的,因此对其进行写入/读取不会导致问题,但不能保证所有的“排出元素”都是以原子方式添加的,因此其他元素可能会在它们之间插入新对象。不过,您应该担心异常,因为它不会被捕获,而且正在被释放的内容可能会丢失(除非在像LinkedBlockingQueue这样的无界blockingqueue中)。