gpt4 book ai didi

java - 当数组变量是 volatile 时,我们是否需要同步访问数组?

转载 作者:太空狗 更新时间:2023-10-29 22:31:33 25 4
gpt4 key购买 nike

我有一个包含对数组的可变引用的类:

private volatile Object[] objects = new Object[100];

现在,我可以保证,只有一个线程(称之为writer)可以写入数组。例如,

objects[10] = new Object();

所有其他线程只会读取由writer 线程写入的值。

问题:是否需要同步此类读写以确保内存一致性?

我想,是的,我应该。因为如果 JVM 在写入数组时提供某种内存一致性保证,从性能的角度来看就没有用了。但我不确定。在文档中找不到任何有用的信息。

最佳答案

您可以使用 AtomicReferenceArray :

final AtomicReferenceArray<Object> objects = new AtomicReferenceArray<>(100);

// writer
objects.set(10, new Object());

// reader
Object obj = objects.get(10);

这将确保原子更新和读/写操作的先行发生一致性,就好像数组的每一项都是volatile一样。

关于java - 当数组变量是 volatile 时,我们是否需要同步访问数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36423196/

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