mFeaute 是一個可變物件。
我想知道 setFeature(Feature feature) 中 mFeature 的變化是否對 useFeature(...) 中的 mFeature 可見,具有不同的顯式同步形式。
謝謝。
public class FeatureService {
private static Feature mFeature= null;
private final Object MUTEX = new Object();
...
static void setFeature(Feature feature){
// doSomething
synchronized (FeatureService.class){
mFeature = feature;
// doSomething
}
// doSomething
}
public void useFeature(...){
// doSomething
synchronized (MUTEX){
someFunction(mFeature);
// doSomething
}
// doSomething
}
}
}
uj5u.com熱心網友回復:
目前尚不清楚您要同步的內容(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);
}
}
}
uj5u.com熱心網友回復:
上面的代碼受到資料競爭的影響,因此被破壞了。由于使用了不同的鎖,因此在 mfeature 的寫入和讀取之間的邊緣之前不會發生。您需要使用相同的鎖實體進行讀取和寫入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341396.html
