Полный пример использования летучего ключевого слова в Java?
Мне нужен простой пример использования volatile
ключевое слово в Java, ведет себя непоследовательно в результате неиспользования volatile
,
Теоретическая часть изменчивого использования мне уже ясна.
1 ответ
Прежде всего, нет гарантированного способа разоблачения кэширования из-за энергонезависимых переменных. Ваша JVM может быть очень любезна с вами все время и эффективно рассматривать каждую переменную как изменчивую.
При этом существует несколько способов увеличить вероятность того, что потоки будут кэшировать свои собственные версии энергонезависимой переменной. Вот программа, которая демонстрирует важность энергозависимости на большинстве машин, на которых я ее тестировал (адаптированная версия здесь):
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 set to false.
и продолжай бежать. Изготовление keepRunning
изменчивый заставляет это печатать
keepRunning set to false.
Thread terminated.
и прекратить.