Слайд 2JLS гарантирует, что чтение-запись переменных примитивных типов кроме long, double – атомарно
Синхронизация
необходима для надежной коммуникации между потоками, и для взаимного исключения
Атомарно – не значит синхронизированно
Слайд 3Hoisting optimization (для не синхронизированных переменных):
Слайд 4Недостаточно синхронизировать только чтение или только запись
Слайд 5Менее громоздкое исправление
Слайд 6++ - не атомарный оператор. На самом деле это ДВЕ операции: прочитать
значение, записать значение + 1
Можно исправить это добавив syncronized и убрав volatile
Но лучше так: