gpt4 book ai didi

java - 安全发布数组元素

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

这个问题与多线程 java 程序中数组内容的安全发布有关。

假设我有一些任意的对象数组:

Object[] myArray = ...

现在这个数组交给另一个线程,可能是这样的:

new Thread() {
public void run() {
// ...
Object o = myArray[0];
// ...
}
};

我的问题是,如果没有进一步的同步,新线程是否会按照“预期”观察数组中的值?这是否取决于数组本身是(最终/可变)字段还是局部变量?第一个线程对数组的后续修改是否立即对新线程可见?安全发布数组元素的最有效方法是什么?

最佳答案

确切的答案取决于数组及其内容的可变性、编写者和读者的数量、您唯一的选择是否是使用数组(而不是相同的线程安全 Collection元素)等

如果我处在你的位置,我可能会花一个晚上在 StackOverflow 中搜索并尝试一些奇特的模式组合(可能是 final 数组引用加上数组元素的不可变包装器,或者如果只有一个编写器,则使用 Unsafe.putOrderedObject 自定义更新方案。

然后在短暂的内部斗争之后,我将所有这些复制到我的“Playground”文件夹中并使用 AtomicReferenceArrayCopyOnWriteArrayList(或其他适当的关闭 -现成的解决方案)。

我还会提醒自己,当我解决了所有更大的问题(如正确性),并且当我有证据证明这个特定部分时,我需要担心性能我的程序需要优化。希望类似的方法也适用于您。

关于java - 安全发布数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630463/

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