[英]Visibility of mutable object with different explicit form of synchronized in Java
mFeaute 是一个可变对象。
我想知道 setFeature(Feature feature) 中 mFeature 的变化是否对 useFeature(...) 中的 mFeature 可见,具有不同的显式同步形式。
谢谢。
public class FeatureService {
private static Feature mFeature= null;
private static final Object MUTEX1 = new Object();
private static final Object MUTEX2 = new Object();
...
static void setFeature(Feature feature){
// doSomething
synchronized (MUTEX1){
mFeature = feature;
// doSomething
}
// doSomething
}
public void useFeature(...){
// doSomething
synchronized (MUTEX2){
someFunction(mFeature);
// doSomething
}
// doSomething
}
}
}
目前尚不清楚您要同步的内容(ClassA 和 ObjectB 含糊不清)。 通常,您希望在与给定共享资源交互时在单个互斥锁上进行同步。 创建一个Object
作为访问内部mFeature
时同步的互斥锁。
public class FeatureService {
private static Feature mFeature= null;
private static final Object MUTEX = new Object();
...
static void setFeature(Feature feature){
synchronized (MUTEX){
mFeature = feature;
}
}
public void useFeature(...){
synchronized (MUTEX){
someFunction(mFeature);
}
}
}
上面的代码受到数据竞争的影响,因此被破坏了。 由于使用了不同的锁,因此在 mfeature 的写入和读取之间的边缘之前不会发生。 您需要使用相同的锁实例进行读取和写入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.