我的问题可能很简单,如果我ConcurrentHashMap::compute
只在具有一定价值的读者和作者中使用,是否足以确保可见性?
我确实知道这种compute
方法:
整个方法调用以原子方式执行
这足以保证可见性吗?具体来说,真正的规范/文档是否明智happens-before
?为了简化我的问题,这里有一个例子:
static class State {
private int age;
int getAge() {
return age;
}
State setAge(int age) {
this.age = age;
return this;
}
}
和 :
// very simplified, no checks
static class Holder {
private static final ConcurrentHashMap<String, State> CHM = new ConcurrentHashMap<>();
public State read(String key) {
return CHM.compute(key, (x, y) -> y);
}
public State write(String key, int age) {
return CHM.compute(key, (x, y) -> y.setAge(y.getAge() + age));
}
}
没有人可以访问CHM
并且只能通过Holder
.
对我来说,答案显然是肯定的,这是安全的,所有读者都会看到最新write
方法的结果。我只是无法将这些点与 的文档联系起来ConcurrentHashMap
,这很可能是显而易见的,但我似乎想念它。