public static volatile List<Thread> list = new ArrayList<Thread>(5);
Что такое тип volatile 😒Алексей
35 уровень
Что такое тип volatile 😒
Архивный
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
AlexTsiunel
17 ноября 2020, 18:26
Простыми словами. У компьютера есть "медленная" и "быстрая" память. "Быстрая" память - это память процессора (ядра процессора). Она же кэш процессора (кэш ядра процессора) смотри тут. В многопоточных программах разные ядра могут работать с разными потоками. Для ускорения
работы, процессор (ядро) при работе с нитью копирует самые часто используемые переменные (в данном случае будет ваш лист без слова volatile) из области памяти в свой кэш и все изменения производит в этой "быстрой" памяти, а после копирует обратно в "медленную" память. Медленная память всё это время содержит старые(!) (неизменённые) значения переменных. Может возникнуть проблема. Одна нить(поток) меняет переменную, вторая нить "не видит" этого изменения, т.к. оно было совершено в быстрой памяти. Нить имеет доступ только к кэшу того ядра которое с ней работает. Помещение слова volatile перед определением переменой всегда читает и пишет её только в основную ("медленную") память. Поэтому все нити которым будет нужна эта переменная будут работать с её актуальными значениями. Ну как то так, в моём понимании.
+4
hidden #598481
13 ноября 2020, 08:16
Это не тип, а ключевое слово. Оно нужно, чтобы исключить ситуацию, когда несколько потоков изменили каждый свою кешированную копию переменной, и возникает конфликт при записи в оригинал. С этим ключевым слово все операции с объектом атомарные (неделимые), а все потоки работают не с кешированной копией переменной, а с ней самой.
https://javarush.com/groups/posts/1998-upravlenie-potokami-metodih-volatile-i-yield
https://stackoverflow.com/questions/106591/what-is-the-volatile-keyword-useful-for
https://ru.stackoverflow.com/questions/1271/Ключевое-слово-volatile-в-java
+1