Прежде всего, нет Гарантировано способ выявления кеширования из-за энергонезависимых переменных. Ваша JVM может просто быть очень любезной для вас все время и эффективно рассматривать каждую переменную как изменчивую.
При этом существует несколько способов увеличить вероятность того, что потоки будут кэшировать собственные версии энергонезависимой переменной. Вот это программа, которая предоставляет значение летучих в большинстве машин я тестировал на (адаптированный вариант из here):
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.
и завершение.
Если вы уже знаете об этой теории, почему бы вам просто не попробовать что-то? – home