В этом учебном пособии (link) о нестабильной декларации Java сказано, что изменчивое объявление может быть альтернативой синхронизации.Синхронизация в качестве альтернативы декларации volatile
пример автора о применении летучей декларации:
volatile boolean shutdownRequested;
...
public void shutdown() { shutdownRequested = true; }
public void doWork() {
while (!shutdownRequested) {
// do stuff
}
}
Моей наивная реализация синхронизации будет:
volatile boolean shutdownRequested;
...
synchronized public void shutdown() { shutdownRequested = true; }
synchronized public void doWork() {
while (!shutdownRequested) {
// do stuff
}
}
кажется, что если поток А вызывает shutdown
в то время как поток B имеет уже вызывается и работает doWork
Казалось бы, поток B будет постоянно блокировать выполнение, потому что это цикл. Кажется, это не дает возможности потоку A получить доступ к булевому. Что автор имел в виду как синхронизированную альтернативу изменчивой декларации?
Статья начинается с того, что 'volatile' не является, вообще говоря, является заменой для надлежащего официального блокировки. –
Да, но этот вопрос касается того, как блокировка является альтернативой использованию изменчивой декларации. – H2ONaCl