gpt4 book ai didi

java - 为什么java并发集合真的是线程安全的

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

我在看 java 并发集合的代码,我看到它们只是包装简单的集合,在操作开始时锁定一些锁并在最后解锁它。

volatile 呢?如果后端集合不是 volatile 的,则其他线程可能会错过更改,因此线程节省在某种程度上被破坏了。我知道 synchronized 可以解决这个问题,但他们只使用锁而没有任何进一步的同步。

这是个问题,还是我遗漏了什么?


更新:

经过轻微的讨论后,我想稍微改一下这个问题。

我想在多线程环境中使用 java 集合。 (例如,目前我正在谈论 PriorityBlockingQueue)

我想确保一个线程对集合所做的更改(推送/弹出)对其他线程立即可见。

Java 并发集合防止我陷入麻烦以在线程数更新时保持集合的内部状态稳定是件好事,但是我想确保数据本身对所有线程都是可见的。

问题是:Java 并发集合没有提供开箱即用的功能,我说得对吗?如果我这样做,我应该使用哪些额外的(最低成本)技术来提供所需的可见性?

谢谢。

最佳答案

来自 BlockingQueue的 Javadoc:

Memory consistency effects: As with other concurrent collections, actions in a thread prior to placing an object into a BlockingQueue happen-before actions subsequent to the access or removal of that element from the BlockingQueue in another thread.

PriorityBlockingQueue 通过 ReentrantLock 提供此行为(作为 Lock 的实现):

...provide[s] the same memory synchronization semantics as provided by the built-in monitor lock, as described in the JLS...

关于java - 为什么java并发集合真的是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4259391/

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