我是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
    }
}


我要在此处实现的目标是确保在任何给定时间在requestMap方法中只有一个线程可以操纵updateMap对象。我想知道上述两个示例是否等效,并且在哪里可以找到记录在案的synchronized Scala用法?

最佳答案

没错,这些是等效的:

//Java
synchronized(foo) { statements ... }

//Scala
foo.synchronized { statements ... }


在scala中,synchronized是一个库结构(尽管是合成的)-即,它是a method on AnyRef

关于java - 在此scala示例中,同步如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47512842/

10-10 10:14