【发布时间】:2015-07-02 11:15:21
【问题描述】:
public abstract class AbstractApplicationContext extends DefaultResourceLoader
implements ConfigurableApplicationContext, DisposableBean {
private boolean active = false;
private final Object activeMonitor = new Object();
public boolean isActive() {
synchronized (this.activeMonitor) {
return this.active;
}
}
protected void cancelRefresh(BeansException ex) {
synchronized (this.activeMonitor) {
this.active = false;
}
}
...
}
为了读取一致性,使用 mutex 而不是 volatile 有什么必要的,还是只是偏好/代码约定/等的问题?乍一看,mutex 并没有什么新东西,只是我们有更多的代码行。此外,我们可以在同步块中更改多个变量,但这不是示例中的问题 - 仅更改了一个变量。
附:我知道什么是互斥体和易失性,请避免在答案中解释 JMM。
【问题讨论】:
标签: java spring concurrency mutex volatile