gpt4 book ai didi

java - 维护引用然后分配新对象线程安全吗?

转载 作者:行者123 更新时间:2023-12-01 19:40:30 24 4
gpt4 key购买 nike

我有一个在线程之间共享的静态 int 数组:

static int[] res = new int[10];

在函数中,我想隔离 res 中的内容,基本上将其值重置为 0。以下代码是线程安全的吗?

final int[] copy = res;
res = new int[10];
// do sth with `copy`

如果没有,在不影响性能的情况下,什么是更明智的方法(除了使用 AtomicInteger 或 Semaphore 之外)。

最佳答案

它不是线程安全的。无法保证其他线程何时(如果有的话)会看到静态变量 res 的更改。

您可以将其更改为:

static volatile int[] res = new int[10];

然后其他线程将保证在下次使用 res 变量时拾取它。

在这种特殊情况下,您仅重置为零并且不依赖于 res 的先前值,这可能已经足够了。

如果您确实依赖于先前的值(或其他共享变量),则需要在线程之间实现进一步的同步。

但是有一个警告:其他线程可能仍在操作“copy”变量中的值,因为它们可能已检索到引用并保留它。

关于java - 维护引用然后分配新对象线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55526832/

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