gpt4 book ai didi

java - 我需要同步对象的引用吗?

转载 作者:行者123 更新时间:2023-11-30 03:20:00 26 4
gpt4 key购买 nike

我使用同步对对象的值进行并发写入/读取操作。

但是,我不确定是否必须同步对对象的引用,该引用可能会同时设置和获取。尽管下面的 B 是一个不可变对象(immutable对象),但 setter 会更改其引用,并且 getter 可能会同时被调用。

class A {
private B b;

public setB(B b) { this.b = b; }
public getB() { return b; }
}

我是否需要同步 B(引用)的 setter 和 getter(如果是这样,下面的代码是一个很好的方法吗)?

class A {
private B b;
private Object bLock = new Object();

public setB(B b) { synchronized(bLock) { this.b = b; } }
public getB() { synchronized(bLock) { return b; } }
}

最佳答案

是的,您需要同步。

您可以使用AtomicReference同步B对象

请注意,在只需要 get 和 set 方法的代码中使用 AtomicReference 太过分了——您需要的只是 volatile

关于java - 我需要同步对象的引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31561834/

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