Некоторые преимущества использования volatile-переменных в многопоточном программировании:
- Видимость изменений. 3 Когда поток записывает значение в volatile-переменную, оно сразу становится видимым для всех других потоков. 3
- Запрет переупорядочивания. 3 Компилятор и процессор не могут переупорядочивать операции чтения/записи volatile-переменных относительно других операций памяти. 3
- Атомарность. 3 Чтение и запись volatile-переменных размером до 64 бит (int, long, float, double, boolean, ссылки) являются атомарными. 3
- Снижение риска ошибок согласованности памяти. 5 Любая запись в volatile-переменную устанавливает связь между событиями и последующими чтениями этой же переменной. 5
- Предотвращение перестановки инструкций в многопоточной среде, что может повысить производительность. 4
Однако volatile не подходит для составных операций, требующих атомарности, и не заменяет синхронизацию. 34