Статический метод для A не может изменить состояние this
объекта A, поэтому у вас нет проблем там.
Нестатический метод может изменять статическое поле.Однако, если вы избегаете этого и используете только статические методы для изменения статических полей, вы можете синхронизировать каждый метод, и он будет работать правильно.
Нет смысла блокировать один объект и изменять несвязанный объект,Если вы собираетесь изменить B, его методы должны быть синхронизированы, и вам может не потребоваться синхронизировать методы на A.
Можете ли вы написать более понятный пример, который будет компилироваться?
class B {
public synchronized alter() { };
}
class A {
public void instanceMethod(B obj){ obj.alter(); };
public static void staticMethod(B obj){ obj.alter(); };
public static void main(String[] args){
B obj = new B();
// create a Thread to modify the state of obj with A's instanceMethod
// create a Thread to modify the state of obj with A's staticMethod
obj.alter();
}
}