Влад
потому что это критически странное поведение, если честно
Не, JMM не гарантирует ничего, если вы намеренно не используете её гарантии happens before.
А в байткоде уже могут видны оптимизации компилятора, и ещё неизвестно, что там Hotspot с процессорами наоптимизировали. На другой платформе код может вести себя по-другому.
Чтобы понять недетерминироанное поаедение, придется отладить все, вплоть до кэшей процессора, и ноль толку, все равно недетерминироанное.
Посмотрите видео Алексея Шипилёва - Близкие Контакты JMM-степени. Особенно в начале - как можно с головой погрузились в тему все равно ошибаться в нюансах и про повреждение мозга современных девелоперов )