gpt4 book ai didi

java - ArrayBlockingQueue 使用单个锁进行插入和删除,而 LinkedBlockingQueue 使用 2 个单独的锁

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:52 25 4
gpt4 key购买 nike

我正在浏览 ArrayBlockingQueue 和 LinkedBlockingQueue 的源代码。 LinkedBlockingQueue 有一个 putLock 和一个 takeLock 分别用于插入和删除,但 ArrayBlockingQueue 只使用 1 个锁。我相信 LinkedBlockingQueue 是根据 Simple, Fast, and Practical Non-Blocking and BlockingConcurrent Queue Algorithms 中描述的设计实现的.在这篇论文中,他们提到他们保留了一个虚拟节点,这样入队者永远不必访问头部,而出队者永远不必访问尾部,从而避免了死锁情况。我想知道为什么 ArrayBlockingQueue 不借鉴相同的想法,而是使用 2 个锁。

最佳答案

ArrayBlockingQueue 必须避免覆盖条目,因此它需要知道起点和终点在哪里。 LinkedBlockQueue 不需要知道这一点,因为它让 GC 担心清理队列中的节点。

关于java - ArrayBlockingQueue 使用单个锁进行插入和删除,而 LinkedBlockingQueue 使用 2 个单独的锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com