gpt4 book ai didi

java - AtomicReference 困难和备选方案

转载 作者:行者123 更新时间:2023-11-29 07:34:12 27 4
gpt4 key购买 nike

所以在我为了好玩而写的各种程序中,都遇到过并发修改异常。

在我天真的尝试解决这个问题时,我使用了 Atomic 而不是某种并发集合。我有点熟悉为什么这是套管错误。本质上,ArrayList 的各个元素是不同步的,可以由不同的线程随心所欲地修改。


谁能帮我总结一下

  • 当我尝试对集合进行原子引用时发生了什么错误
  • 什么是对数组或列表的原子引用的合法用例
  • 有哪些更好的替代方法来存储可供多个线程使用的游戏实例

  • 最佳答案

    使用AtomicReference 来存储对象(例如集合)不足以使其成为线程安全的。事实上,如果你放入 AtomicReference 的对象不是线程安全的,例如 ArrayList,如果我们有多个线程试图修改它的状态,使用它仍然是不安全的同时。所以好的方法仍然是在你的 AtomicReference 中放入一个不可变的对象,这样它的状态就不能再被多个线程修改了。在集合的情况下,例如,您可以使用 Collections.unmodifiable* 类型的方法,例如 Collections.unmodifiableList(List) 用于列表,以便放入AtomicReference 集合的不可变版本。

    如果您需要线程安全的集合,您应该查看包 java.util.concurrent 中的类,您会发现集合本身是线程安全的。例如,如果您主要阅读而很少修改您的 List,则可以使用线程安全高效的列表 CopyOnWriteArrayList .

    关于java - AtomicReference<ArrayList> 困难和备选方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38028892/

    27 4 0