作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想知道为什么 method drainTo
仅出现在并发收集框架中(特别是 BlockingQueue),而不出现在常规收集框架中。这有什么理由吗?提前致谢。
最佳答案
与往常一样,对于此类问题,如果不询问类(class)的作者本人,就很难回答。但我们可以做出一些有根据的猜测。
javadoc 指出:
Removes all available elements from this queue and adds them to the given collection. This operation may be more efficient than repeatedly polling this queue.
所以根本原因可能是为了效率。
drainTo
本质上相当于(为了简单起见,在单线程环境中):
while ((e = queue.poll()) != null) collection.add(e);
使用阻塞队列,每次迭代(很可能)都会获取一些锁并再次释放它,这不是最佳的。例如,如果查看 ArrayBlockingQueue 中的实现,您会发现在整个迭代中只获取一次锁,可能是因为该库的作者发现它效率更高。
关于java - 并发包中的阻塞队列方法;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17677689/
我是一名优秀的程序员,十分优秀!