Обмен данными между потоками

116
27 февраля 2021, 16:30

С одной стороны постоянно слышу о такой проблеме многопоточности как гонки,когда два потока могут обращаться с одними и теми же ресурсами и в результате не синхронизировано их изменять из-за чего возникают ошибки. Но так же есть зарезервированное слово volatile ,которое можно использовать для того,что бы данные измененные в одном потоке были видны в другом. По мне ,так тут некоторое противоречие.В первом случае потоки видят данные друг друга,а во втором для этого надо специально сообщать. ЧТо я не понимаю?

Answer 1

volatile - это переменная, значение которой не кешируется. Таким образом, в ней всегда актуальные данные. Сам же процесс перезаписи происходит атомарно, то есть, за одно мгновение относительно восприятия времени потоками, если так можно выразиться.

Answer 2

Ну volatile также как и synchronized делает потокобезопасным, но если допустим 2 потока работают на разных процессорах с одним объектом то в зависимости от кеша он может быть на одном процессере в кеше в одном состоянии, а в кеше второго процессора в другом, волатайл позволяет синхронизировать и это поведение.

Answer 3

volatile не позволяет потокам копировать переменные в свой кэш. Вместо этого, потоки берут volatile переменные из главной копии. Поэтому, при изменении volatile переменной в одном потоке, она изменяется и в другом.

READ ALSO
Как изменить цвет во всех классах которые указаны в JCheckBox

Как изменить цвет во всех классах которые указаны в JCheckBox

Как изменить цвет GUI во всех классах с помощью одного класса и JCheckBox'a когда нажимаешь на него меняется цвет к примеру на красный когда снимаешь...

104
Выбрать и вывести из строки слова от a до h

Выбрать и вывести из строки слова от a до h

Вводится одна строка целикомНеобходимо вывести те слова данной строки, которые начинаются с буквы из интервала от a до h

97
Ошибка 404 после авторизации

Ошибка 404 после авторизации

Я когда хочу админом войти на страницу в своем проекте он выдает ошибку 404

114
Как создать двухмерный штрихкод в виде векторного изображения?

Как создать двухмерный штрихкод в виде векторного изображения?

Я создаю двухмерные штрихкоды с помощью API-интерфейса iText, но они попадают в PDF-документ как растровые изображения, а во время печати на принтерах...

91