BlockingQueue有一个名为drainTo()的方法,但它没有被阻塞。我需要一个我想阻塞的队列,并且能够在单个方法中检索排队的对象。
Object first = blockingQueue.take();
if ( blockingQueue.size() > 0 )
blockingQueue.drainTo( list );我猜上面的代码可以工作,但我正在寻找一个优雅的解决方案。
发布于 2015-06-23 19:29:11
如果你碰巧使用Google Guava,有一个很棒的Queues.drain()方法。
以
BlockingQueue.drainTo(Collection, int)的形式排空队列,但是如果请求的numElements元素不可用,它将一直等待到指定的超时。
发布于 2015-04-08 00:40:42
我发现这个模式很有用。
List<byte[]> blobs = new ArrayList<byte[]>();
if (queue.drainTo(blobs, batch) == 0) {
blobs.add(queue.take());
}发布于 2009-05-06 21:31:25
有了可用的API,我不认为你会变得更优雅。除了您可以删除大小测试。
如果您希望原子地检索连续的元素序列,即使另一个删除操作同时进行,我也不相信即使是drainTo也不能保证这一点。
https://stackoverflow.com/questions/831834
复制相似问题