Если все экземпляры класса обращаются к фрагменту данных, вы можете использовать static
членов:
public class Foo {
private static Object shared;
public static void accessShared() { /* code */ }
}
В этом случае вы можете сделать метод static
synchronized
:
public class Foo {
private static Object shared;
public static synchronized void accessShared() { /* code */ }
}
Это эквивалентно коду:
public class Foo {
private static Object shared;
public static void accessShared() {
synchronized (Foo.class) { /* code */ }
}
}
Помните, Foo.class
сам является объектом, и, следовательно, с ним связан монитор.