在此 Scala 示例中,同步是如何工作的?
How does synchronization work in this scala example?
我是 scala 的新手,正在努力适应这门语言。我一直在寻找与以下 Java 同步技术等效的方法。
private final Map<String, Future<Boolean>> requestMap = new HashMap<>();
public void updateMap(String key) {
synchronized(requestMap) {
// update contents of requestMap
}
}
我认为下面的语法是上面 Java 的 Scala 等价物。
private val requestMap = new mutable.LinkedHashMap[String, Future[Boolean]]
def updateMap(key: String): Unit = {
requestMap.synchronized {
// update contents of requestMap
}
}
我在这里试图实现的是确保只有一个线程可以在 updateMap
方法中的任何给定时间操作 requestMap
对象。我想知道上面的两个例子是否等效,我在哪里可以找到 synchronized
的 Scala 用法记录?
你是对的,这些是等价的:
//Java
synchronized(foo) { statements ... }
//Scala
foo.synchronized { statements ... }
在 scala 中,synchronized
是一个库构造(尽管是 合成的 一个)——也就是说,它是 a method on AnyRef
参考相同的讨论,我们可以有这样的东西吗?它会使 AnyRef.synchronized 中的代码,线程安全吗?
Object abc {
...
*AnyRef*.synchronized{
val ff = new FunClass()
ff.displayTs()
}
}
class FunClass() {
def displayTs(): Unit{
println(timestamp)
}
}
...
}
我是 scala 的新手,正在努力适应这门语言。我一直在寻找与以下 Java 同步技术等效的方法。
private final Map<String, Future<Boolean>> requestMap = new HashMap<>();
public void updateMap(String key) {
synchronized(requestMap) {
// update contents of requestMap
}
}
我认为下面的语法是上面 Java 的 Scala 等价物。
private val requestMap = new mutable.LinkedHashMap[String, Future[Boolean]]
def updateMap(key: String): Unit = {
requestMap.synchronized {
// update contents of requestMap
}
}
我在这里试图实现的是确保只有一个线程可以在 updateMap
方法中的任何给定时间操作 requestMap
对象。我想知道上面的两个例子是否等效,我在哪里可以找到 synchronized
的 Scala 用法记录?
你是对的,这些是等价的:
//Java
synchronized(foo) { statements ... }
//Scala
foo.synchronized { statements ... }
在 scala 中,synchronized
是一个库构造(尽管是 合成的 一个)——也就是说,它是 a method on AnyRef
参考相同的讨论,我们可以有这样的东西吗?它会使 AnyRef.synchronized 中的代码,线程安全吗?
Object abc {
...
*AnyRef*.synchronized{
val ff = new FunClass()
ff.displayTs()
}
}
class FunClass() {
def displayTs(): Unit{
println(timestamp)
}
}
...
}