Java 在这个scala示例中,同步是如何工作的?
我是scala的新手,我正在努力适应这种语言。我正在寻找一种与以下Java同步技术等价的技术Java 在这个scala示例中,同步是如何工作的?,java,scala,synchronization,synchronized,Java,Scala,Synchronization,Synchronized,我是scala的新手,我正在努力适应这种语言。我正在寻找一种与以下Java同步技术等价的技术 private final Map<String, Future<Boolean>> requestMap = new HashMap<>(); public void updateMap(String key) { synchronized(requestMap) { // update contents of requestMap
private final Map<String, Future<Boolean>> requestMap = new HashMap<>();
public void updateMap(String key) {
synchronized(requestMap) {
// update contents of requestMap
}
}
我在这里试图实现的是确保在
updateMap
方法中,在任何给定时间只有一个线程可以操作requestMap
对象。我想知道上面的两个例子是否等效,我在哪里可以找到synchronized
的Scala用法的文档?你说得对,这些是等效的:
//Java
synchronized(foo) { statements ... }
//Scala
foo.synchronized { statements ... }
在scala中,
synchronized
是一个库构造(尽管是合成的)-也就是说,它是引用相同的讨论。我们可以有这样的东西吗?它会使AnyRef.synchronized中的代码是线程安全的吗
Object abc {
...
*AnyRef*.synchronized{
val ff = new FunClass()
ff.displayTs()
}
}
class FunClass() {
def displayTs(): Unit{
println(timestamp)
}
}
...
}
synchronized
没有区别,因为它是JVM上的一个绑定:Scalafoo.synchronized{..}
=synchronized(foo){..}
好的,我想了很多,但找不到文档。你能告诉我应该去哪里看吗?啊,我还发现了一个关于这个方法是如何实现的问题:
Object abc {
...
*AnyRef*.synchronized{
val ff = new FunClass()
ff.displayTs()
}
}
class FunClass() {
def displayTs(): Unit{
println(timestamp)
}
}
...
}