Я читаю об изменчивом ключевом слове в Java и полностью понимаю его теоретическую часть.
Но я ищу хороший пример, который показывает, что произошло бы, если бы переменная не была изменчивой и была бы.
Приведенный ниже фрагмент кода не работает должным образом (взято из здесь):
class Test extends Thread {
boolean keepRunning = true;
public void run() {
while (keepRunning) {
}
System.out.println("Thread terminated.");
}
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
t.start();
Thread.sleep(1000);
t.keepRunning = false;
System.out.println("keepRunning set to false.");
}
}
В идеале, если keepRunning
не является энергозависимым, поток должен работать бесконечно долго. Но он останавливается через несколько секунд.
У меня есть два основных вопроса:
- Кто-нибудь может объяснить изменчивость с примером? Не с теорией из JLS.
- Является ли энергозависимый заменитель синхронизации? Достигает ли он атомарности?