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中)。