在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/

10-09 07:06