Jas*_*Jas 0 java concurrency scala
在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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我看到scala中我最好使用TrieMap(如果我坚持使用可变版本)我真的不明白是否已经存在一个单击操作,这TrieMap将为我做循环,如果是的话可以你举个例子吗?
小心TrieMap(至少是可变的),它实际上不是线程安全的.它至少继承了一个非线程安全的实现getOrElseUpdate.我没有检查其他方法(例如putIfAbsent)是否有相同的问题,但是一个并发错误已经够糟了!
附录
我不会添加其他评论,而是将新信息放在这里......
TrieMap.putIfAbsent有一个TrieMap特定的实现,但它的value参数不是一个名字参数,所以如果缓存的目的是避免昂贵的计算,它会再次失败!
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |