这是ConcurrentLinkedQueue文档的描述:
基于链接节点的无界线程安全队列。此队列对元素进行 FIFO(先进先出)排序。
...
此实现采用高效的“无等待”算法
是否有可能无界 且 无需等待?
我很确定等待自由确保了对任何操作的限制。
这是ConcurrentLinkedQueue文档的描述:
基于链接节点的无界线程安全队列。此队列对元素进行 FIFO(先进先出)排序。
...
此实现采用高效的“无等待”算法
是否有可能无界 且 无需等待?
我很确定等待自由确保了对任何操作的限制。
我很确定等待自由确保了对任何操作的限制。
操作所花费的时间(或指令数量,或其他)的界限。
在那个 JavaDoc 中,“无界”可能是指队列可能包含的元素数。
例如,LinkedBlockingDeque 的 JavaDoc写道:
基于链接节点的可选有界阻塞双端队列。
可选的容量绑定构造函数参数用作防止过度扩展的一种方式。容量(如果未指定)等于 Integer.MAX_VALUE。链接节点在每次插入时动态创建,除非这会使双端队列超出容量。
无等待实际上只是意味着在有限数量的步骤内,操作将按照说明完成
如果每个操作都限制了算法在操作完成之前将采取的步数,则该算法是无等待的
此定义不适用于ConcurrentLinkedQueue
. 在轮询(或放入)队列时,每个线程都有可能无限次失败。仅这一事实就告诉我们队列并不是真正的空闲等待。我相信作者没有使用 Herlihy 在 The Art of Multiprocessor Programming 中对无等待的定义。
有关更多信息,CLQ 使用 Michael & Scott 算法,此处解释
编辑:刚刚意识到我为 M 和 S 队列提供的链接也在 API 中。两者都应该没问题。