它说scala TrieMap在迭代TrieMap时会生成一个consistent
迭代器,我不明白这里consistent
的真正含义。
我需要一个集合来构建一个对象池,也就是说,池中的对象将被同时借用/释放,同时,一个预定的线程将迭代这个集合,并检查是否有陈旧的对象,如果然后创建一个新的并从集合中删除陈旧的那个。
我正在评估scala TrieMap是否可以用作池。
此外,有人可以展示一些代码来说明scala TrieMap
和Java ConcurrentHashMap
之间的区别吗?
答案 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。