2012-05-26 4 views
5

Мне нужен простой пример использования ключевого слова volatile в java, который ведет себя непоследовательно в результате использования volatile.Полный пример использования летучего ключевого слова в java?

Теория часть летучего использования уже понятна для меня.

+0

Если вы уже знаете об этой теории, почему бы вам просто не попробовать что-то? – home

ответ

11

Прежде всего, нет Гарантировано способ выявления кеширования из-за энергонезависимых переменных. Ваша 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. 

и завершение.

+2

+1. Тот же ответ, что и мой, но скорее и более подробно –

+2

Забавно, если вы сделаете цикл чем-то, пример больше не будет работать (например, 'System.out.println (". ");' Inside 'while (keepRunning)' – Miquel

Смежные вопросы