Гарантируется ли обновление статической переменной внутри синхронизированного метода класса раньше? Используйте это в качестве примера:
public class MyClass {
private static boolean isDone = false;
public static synchronized doSomething() {
if (!isDone) {
// ...
}
isDone = true;
}
}
Является ли переменная isDone
(но не volatile
) видимой для всех потоков после обновления внутри этого синхронизированного метода класса? Насколько я понимаю, синхронизация самого MyClass.class
не гарантирует, что все обновления его статических переменных будут видны другим потокам, поскольку другие потоки могут иметь для этого локальный кеш.