在Java中,我用于执行以下操作:
boolean done = false;
while(!done) {
Long oldValue = map.putIfAbsent(key, 1L);
if(oldValue != null) {
done = map.replace(key, oldValue, oldValue + 1);
} else {
done = true;
}
}
现在我看到在scala中我最好使用
TrieMap
(如果我坚持使用可变版本),我真的不明白在此TrieMap
中是否已经存在一次射击操作,它将在while循环中执行对我来说,如果可以,请举例说明? 最佳答案
注意TrieMap
(至少是可变的),它实际上不是线程安全的。至少,它继承了getOrElseUpdate
的非线程安全实现。我没有检查其他方法(例如putIfAbsent
)是否存在相同的问题,但是一个并发错误已足够严重!
附录
我将在此处添加新信息,而不是添加其他评论...TrieMap.putIfAbsent
具有特定于TrieMap
的实现,但是其value参数不是by-name参数,因此,如果缓存的目的是避免进行昂贵的计算,则它将再次失败!
关于java - 是否有一个while循环的替代品,以使用scala TrieMap更新并发 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21286823/