相对于其他字段的可变语义
假设我有以下代码
private volatile Service service;
public void setService(Service service) {
this.service = service;
}
public void doWork() {
service.doWork();
}
标记为易失性的已修改字段及其值不依赖于以前的状态。所以,这是正确的多线程代码(不要为实现而烦恼)。Service
据我所知,从内存可见性的角度来看,读取易失性变量就像进入锁一样。这是因为正常变量的读取不能与读取可变变量重新排序。
这是否意味着以下代码是正确的?
private volatile boolean serviceReady = false;
private Service service;
public void setService(Service service) {
this.service = service;
this.serviceReady = true;
}
public void doWork() {
if ( serviceReady ) {
service.doWork();
}
}