Насколько безопасна «безопасность из воздуха» в Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Насколько безопасна «безопасность из воздуха» в Java?

Сообщение Anonymous »

Java Concurrency in Practice объясняет эту концепцию:

Когда поток читает переменную без синхронизации, он может видеть
устаревшее значение, но, по крайней мере, он видит значение, которое действительно было помещено туда
каким-то потоком, а не какое-то случайное значение. Эта гарантия безопасности
называется безопасностью «из воздуха».

Является ли этот тип безопасности слабым, поскольку он может включать устаревшее значение?
Возможно, этот фрагмент, «по крайней мере, он видит значение, которое действительно было помещено туда каким-то потоком, а не какое-то случайное значение», было упомянуто, поскольку предыдущей темой книги была возможность JVM переупорядочивать операторы переменных по ссылке на «совместное использование переменных без синхронизации»?
Пример: в зависимости от переупорядочения: может быть распечатано 42 или 0.
public class NoVisibility {
private static boolean ready;
private static int number;

private static class ReaderThread extends Thread {
public void run() {
while(!ready)
Thread.yield();
System.out.println(number);
}
}

public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready = true;
}
}
Ответить

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

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

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

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

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