在Scala中使用TrieMap的getOrElseUpdate

时间:2015-06-09 15:23:16

标签: scala caching concurrency

我正在使用getOrElseUpdate的{​​{1}}方法(来自scala.collection.concurrent.TrieMap

2.11.6

据我了解,如果我在多个线程中调用 // simplified for clarity val trie = new TrieMap[Int, Future[String]] def foo(): String = ... // a very long process val fut: Future[String] = trie.getOrElseUpdate(id, Future(foo())) 而没有任何同步,则只需一次调用getOrElseUpdate

这是对的吗?

1 个答案:

答案 0 :(得分:1)

当前的实现是它将被调用零次或一次。但是,可以在不插入结果的情况下调用它。 (这是基于CAS的映射的标准行为,而不是使用synchronized的映射。)