gpt4 book ai didi

android - Kotlin object/singleton 的方法是否同步?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:48 26 4
gpt4 key购买 nike

@Synchronized 注释添加到对象的方法以使它们成为原子方法是否有意义,或者不需要它?

例如:

object Singleton {

var field1: Int = 0
private set

var field2: Int = 0
private set

@Synchronized fun updateFields(f1: Int, f2: Int) {
field1 = f1
field2 = f2
}

}

我想确保当我从其他对象读取它们时所有字段都被更新。我应该保留 @Synchronized 注释吗?

最佳答案

如果你想实现@Synchronized您需要明确添加语义 - 如您的示例所示。

object Singleton{} 在这方面与使用例如创建的对象没有什么不同val obj = Singleton()

另一种确保字段同步的方法是对其进行显式建模,例如:

object Singleton {
@Volatile var state = State(0, 0)

val field1: Int get() = state.field1
val field2: Int get() = state.field2

data class State(val field1: Int, val field2: Int)
}

并使用 Singleton.state = Singleton.state.copy(field2 = 3) 更新值。这显然与 @Synchronized 的行为不完全相同,但在调用方更明确地表明值是同步的。

关于android - Kotlin object/singleton 的方法是否同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386116/

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