首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BlockingQueue阻塞的drainTo()方法

BlockingQueue阻塞的drainTo()方法
EN

Stack Overflow用户
提问于 2009-05-06 21:22:24
回答 4查看 23K关注 0票数 34

BlockingQueue有一个名为drainTo()的方法,但它没有被阻塞。我需要一个我想阻塞的队列,并且能够在单个方法中检索排队的对象。

代码语言:javascript
复制
Object first = blockingQueue.take();

if ( blockingQueue.size() > 0 )
    blockingQueue.drainTo( list );

我猜上面的代码可以工作,但我正在寻找一个优雅的解决方案。

EN

回答 4

Stack Overflow用户

发布于 2015-06-23 19:29:11

如果你碰巧使用Google Guava,有一个很棒的Queues.drain()方法。

BlockingQueue.drainTo(Collection, int)的形式排空队列,但是如果请求的numElements元素不可用,它将一直等待到指定的超时。

票数 17
EN

Stack Overflow用户

发布于 2015-04-08 00:40:42

我发现这个模式很有用。

代码语言:javascript
复制
List<byte[]> blobs = new ArrayList<byte[]>();
if (queue.drainTo(blobs, batch) == 0) {
   blobs.add(queue.take());
}
票数 8
EN

Stack Overflow用户

发布于 2009-05-06 21:31:25

有了可用的API,我不认为你会变得更优雅。除了您可以删除大小测试。

如果您希望原子地检索连续的元素序列,即使另一个删除操作同时进行,我也不相信即使是drainTo也不能保证这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/831834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档