Потоки не работают без энергозависимости и считывают значение из ОЗУ вместо кеширования.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Потоки не работают без энергозависимости и считывают значение из ОЗУ вместо кеширования.

Сообщение Anonymous »

Предполагается, что Volatile заставляет потоки считывать значения из ОЗУ, отключая кеш потока, а без Volatile будет включено кэширование, в результате чего поток не будет знать об изменении переменной, сделанной другой поток, но это не работает для приведенного ниже кода.
Почему это происходит, и код работает одинаково с ключевым словом Летучий и без него?

Код: Выделить всё

public  class Racing{

private  boolean won = false;  //without volatile keyword

public void race() throws InterruptedException{
Thread one = new Thread(()->{
System.out.println("Player-1 is racing...");
while(!won){
won=true;
}
System.out.println("Player-1 has won...");
});

Thread two=new Thread(()->{
System.out.println("Player-2 is racing...");
while(!won){
System.out.println("Player-2 Still Racing...");
}
});

one.start();
//Thread.sleep(2000);
two.start();
}

public static void main(String k[]) {
Racing racing=new Racing();
try{
racing.race();
}
catch(InterruptedException ie){}
}

Почему это ведет себя одинаково с летучим и без него?

Подробнее здесь: https://stackoverflow.com/questions/654 ... stead-of-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»