gpt4 book ai didi

Java:如果多个线程尝试访问从 LinkedList 而不是 ConcurrentLinkedQueue 实现的队列,会发生什么情况?

转载 作者:行者123 更新时间:2023-11-30 07:46:11 25 4
gpt4 key购买 nike

如果多个线程尝试访问通过 LinkedList 而不是 ConcurrentLinkedQueue 实现的队列,会发生什么?

假设每个线程只使用add()poll()并且没有其他函数调用,这两个操作是原子操作吗?

如果它们是原子的,那么使用 ConcurrentLinkedQueue 而不是常规 LinkedList 实现有好处吗?

最佳答案

未定义。常规的 LinkedList 对于多线程使用来说不是原子的/安全的。

您可以将其包装在Collections.synchronizedList(LinkedList)中以获得原子操作,但它仍然不同。 ConcurrentLinkedQueue 专门设计用于多线程环境,作为“基于链接节点的无界线程安全队列”。如果您阅读documentation,您会发现它的一些不同之处。就像

implementation employs an efficient non-blocking algorithm [...]

而同步的LinkedList会锁定每个操作的整个列表。但它也有缺点,例如

Beware that, unlike in most collections, the size method is NOT a constant-time operation.

这取决于您的要求,但如果您想要并发队列,则可以很安全地假设您不应该使用 LinkedList

关于Java:如果多个线程尝试访问从 LinkedList 而不是 ConcurrentLinkedQueue 实现的队列,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923632/

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