나는 싱글과 같은 역할을하는 정적 필드를 포함하는 클래스가 있습니다수퍼 클래스의 정적 필드에서 액세스를 동기화하는 방법은 무엇입니까?
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에 액세스 할 때이를 위해, 나는 슈퍼 클래스를 동기화 :이 솔루션을
public class B extends A {
public void myMethod(){
synchronized (A.class) {
myAPI = getAPI();
// do stuffs with myAPI
}
}
}
을, 내가 대신 그냥 API 인스턴스의 전체 클래스를 잠 그려면, 그래서 내 A 급의 다른 방법은 없습니다 API 및 성능에 대한 하위 클래스 작업이 줄어들 때 사용할 수 있습니다.
이것이 최선의 해결책이라고 생각하십니까? 아니면 더 좋은 방법을 알고 있습니까?
감사합니다.
여기에 * AtomicReference *가 필요 없습니다. – TacticalCoder