Javadoc 来自ConcurrentHashMap#computeIfAbsent
says
计算应该简短且简单,并且不得试图
更新此地图的任何其他映射。
但是,据我所知,使用remove()
and clear()
里面的方法mappingFunction
工作正常。例如这个
Key element = elements.computeIfAbsent(key, e -> {
if (usages.size() == maxSize) {
elements.remove(oldest);
}
return loader.load(key);
});
里面使用remove()方法有什么不好的后果mappingFunction
可能?
这是一个不良后果的例子:
ConcurrentHashMap<Integer,String> cmap = new ConcurrentHashMap<> ();
cmap.computeIfAbsent (1, e-> {cmap.remove (1); return "x";});
此代码会导致死锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)