我有包含就像一個單身靜態字段類:如何同步超類的靜態字段上的訪問?
public class A {
private static MyAPI instance = null;
protected synchronized static MyAPI getAPI() throws Exception {
if (instance == null){
// init API;
}
return instance;
}
// other methods
}
而且我有多個類從A類繼承和需要執行的API操作。我在多線程環境中工作,API可以一次工作一次,所以我必須確保所有的子類不能同時在API上工作。要做到這一點,當我訪問子類的API同步I超類:
public class B extends A {
public void myMethod(){
synchronized (A.class) {
myAPI = getAPI();
// do stuffs with myAPI
}
}
}
有了這個解決方案,我鎖定整個類,而不是僅僅的API實例,所以我的A類的其他方法都沒有當一個子類在API上工作並且可以減少性能時可用。
您認爲這是最好的解決方案還是您知道更好的方法?
謝謝。
這裏沒有需要* AtomicReference *。 – TacticalCoder 2012-01-17 11:00:35