У меня есть класс, который содержит статическое поле, которое действует как одноточечные:Как синхронизировать доступ к статическому полю суперкласса?
public class A {
private static MyAPI instance = null;
protected synchronized static MyAPI getAPI() throws Exception {
if (instance == null){
// init API;
}
return instance;
}
// other methods
}
И у меня есть несколько классов, которые наследуют от класса А и необходимых для выполнения действий по API. Я работаю в многопоточной среде, и API может работать один раз за раз, поэтому я должен гарантировать, что все подклассы не будут работать в API одновременно. Чтобы сделать это, я синхронизировать суперкласс, когда я получить доступ к API в подклассы:
public class B extends A {
public void myMethod(){
synchronized (A.class) {
myAPI = getAPI();
// do stuffs with myAPI
}
}
}
С помощью этого решения, я заблокировать весь класс вместо всего экземпляра API, так что другие методы моего класса А не доступный, когда подкласс работает над API и производительность может быть уменьшена.
Как вы думаете, это лучшее решение или вы знаете лучший способ?
Спасибо.
Существует нулевая потребность в * AtomicReference * здесь. – TacticalCoder