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