gpt4 book ai didi

java - 如果不会发生争用,读取时是否需要同步

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

考虑下面的代码狙击手:

package sync;

public class LockQuestion {
private String mutable;

public synchronized void setMutable(String mutable) {
this.mutable = mutable;
}

public String getMutable() {
return mutable;
}
}

在时间 Time1 线程 Thread1 将更新“可变”变量。 setter 中需要同步,以便将内存从本地缓存刷新到主内存。在时间 Time2(Time2 > Time1,无线程争用)线程 Thread2 将读取可变值。

问题是——我需要把 synchronized 放在 getter 之前吗?看起来这不会导致任何问题 - 内存应该是最新的并且线程 2 的本地缓存内存应该被线程 1 失效和更新,但我不确定。

最佳答案

而不是奇怪,为什么不直接使用 java.util.concurrent 中的原子引用呢? ?

(就其值(value)而言,我对 happens-before 的阅读并不能保证 Thread2 会看到对可变的更改,除非它也使用同步......但我总是对 JLS 的那部分感到头疼,所以使用原子引用)

关于java - 如果不会发生争用,读取时是否需要同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329818/

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