首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java () vs BlockingQueue ()

Java () vs BlockingQueue ()
EN

Stack Overflow用户
提问于 2014-04-30 12:19:37
回答 2查看 38.2K关注 0票数 36

在无限循环中使用队列中的值时--哪个更有效:

1)通过take()阻塞队列,直到有值可用

代码语言:javascript
复制
while (value = queue.take()) { doSomething(value); }

2)休眠n毫秒,检查商品是否可用

代码语言:javascript
复制
while (true) {

    if ((value = queue.poll()) != null) { doSomething(value); }

    Thread.sleep(1000);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-30 12:29:31

阻塞可能更有效。在后台,如果没有可用的元素,最初调用take()的线程就会进入睡眠状态,让其他线程做它们需要做的任何事情。将元素添加到队列的方法将在添加元素时唤醒等待的线程,因此只需花费最少的时间反复检查队列中是否有元素可用。

票数 61
EN

Stack Overflow用户

发布于 2017-11-14 11:44:40

使用take()时要小心。如果您从服务使用take(),并且服务具有数据库连接。

如果在陈旧连接超时后返回take(),则会抛出陈旧连接异常。

对预定义的等待时间使用轮询,并对返回的对象添加null检查。

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

https://stackoverflow.com/questions/23379623

复制
相关文章

相似问题

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