scala TrieMap和Java ConcurrentHashMap之间的区别是什么?

时间:2017-08-08 11:05:26

标签: scala

它说scala TrieMap在迭代TrieMap时会生成一个consistent迭代器,我不明白这里consistent的真正含义。

我需要一个集合来构建一个对象池,也就是说,池中的对象将被同时借用/释放,同时,一个预定的线程将迭代这个集合,并检查是否有陈旧的对象,如果然后创建一个新的并从集合中删除陈旧的那个。

我正在评估scala TrieMap是否可以用作池。

此外,有人可以展示一些代码来说明scala TrieMapJava ConcurrentHashMap之间的区别吗?

1 个答案:

答案 0 :(得分:2)

我遇到的两个区别之一是TrieMap.getOrElseUpdate可能多次运行提供的操作(尽管每个线程调用它最多一次)但是ConcurrentHashMap.computeIfAbsent会进行一些锁定以确保它只运行一旦穿过所有线程。

您可以尝试以下代码:

(0 to 1000) map { _ =>
  Future { 
    Thread.sleep(100)
    map.getOrElseUpdate(1, {
      Thread.sleep(100)
      counter.incrementAndGet()
    }) 
  }
}

并且计数器很可能不是1,但是当使用concurrentHashMap进行尝试时,它是1。