java - 并发包中的阻塞队列方法;

标签 java concurrency queue blockingqueue

想知道为什么 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/

相关文章:

c++ - 什么数据类型的结构具有最大大小且元素是 FIFO?

java - 有条件地忽略 JUnit 4 中的测试

Java:SingleThreadScheduledExecutor & java.util.concurrent.RejectedExecutionException

concurrency - wait-free的定义(指并行编程)

c - 在不使用文件的情况下对 C 中的队列中的数字进行排序

c - C 中的非忙阻塞队列实现

java - 使用 Maven 原型(prototype)(无 Velocity)时有没有办法只复制资源?

java - 如何在不提及类名的情况下调用静态方法

java - 如何覆盖已部署应用程序的 Java 容器 URL 映射

java - 强制解锁可重入锁