假设我有以下代码
private volatile Service service;
public void setService(Service service) {
this.service = service;
}
public void doWork() {
service.doWork();
}
标记为 volatile 的已修改字段,其值不依赖于先前的状态。所以,这是正确的多线程代码(暂时不要为Service
实现而烦恼)。
据我所知,从内存可见性的角度来看,读取 volatile 变量就像进入锁一样。这是因为普通变量的读取不能通过读取 volatile 变量重新排序。
这是否意味着以下代码是正确的?
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();
}
}