Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在这个scala示例中,同步是如何工作的?_Java_Scala_Synchronization_Synchronized - Fatal编程技术网

Java 在这个scala示例中,同步是如何工作的?

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

我是scala的新手,我正在努力适应这种语言。我正在寻找一种与以下Java同步技术等价的技术

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上的一个绑定:Scala
foo.synchronized{..}
=
synchronized(foo){..}
好的,我想了很多,但找不到文档。你能告诉我应该去哪里看吗?啊,我还发现了一个关于这个方法是如何实现的问题:
Object abc {
 ...
    *AnyRef*.synchronized{
       val ff = new FunClass()
       ff.displayTs()
    }

}

class FunClass() {
  def displayTs(): Unit{
    println(timestamp)
  }
}

...
}