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;
}
}
Насколько безопасна «безопасность из воздуха» в Java? ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1778402362
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;
}
}
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия