gpt4 book ai didi

java - 我在 Scala 中同步什么对象?

转载 作者:太空狗 更新时间:2023-10-29 23:00:23 25 4
gpt4 key购买 nike

在 C# 中它非常简单:

class Class1{
private static readonly object locker = new object();
void Method1(){
lock(locker) { .... }
}
}

而且我绝对不应该在 this 上进行同步,因为它可能会导致死锁。同样,在 Scala 中,我看到了一些例子,但无法理解同步的基本原理和我应该用来进行同步的对象(字段)是什么:

#1
def add(user: User) {
// tokenizeName was measured to be the most expensive operation.
val tokens = tokenizeName(user.name)

tokens.foreach { term =>
userMap.synchronized {
add(term, user)
}
}
}

#2
class Person(var name: String) {
def set(changedName: String) {
this.synchronized {
name = changedName
}
}
}

#3 and so on...

你能帮我说清楚吗?

最佳答案

在 Scala 中,获得相同的行为甚至更直接(我假设您出于某种原因想要锁定包含的对象,例如比锁定该类的整个实例更细粒度的控制):

class Class1 {
private object Locker
def method1 { Locker.synchronized { ... } }
}

但是你应该很少以这种方式控制事情。特别是,如果不十分注意 ... 中的内容,它就无法防止 C# 或 Scala 中的死锁。

您至少应该使用 java.util.concurrent 中的并发工具,并且您可能想要查看 futures 或 actor。

关于java - 我在 Scala 中同步什么对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17129963/

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