Пропорционально, вероятно, справедливо будет сказать, что очень немногие программисты в достаточной степени понимают синхронизацию и параллелизм. Кто знает, сколько сейчас существует серверных приложений, управляющих финансовыми транзакциями, медицинскими записями, полицейскими записями, телефонией и т. Д. И т. Д., Которые содержат ошибки синхронизации и, по сути, работают случайно или очень редко из-за сбоя (никогда не слышали, чтобы кто-то получил фантом телефонный звонок добавлен к их счету за телефон?) по причинам, которые никогда не рассматривались и не доходили до сути.
Публикация объектов представляет собой особую проблему, потому что ее часто упускают из виду, и для компиляторов вполне разумно делать оптимизации, которые могут привести к неожиданному поведению, если вы не знаете об этом: в JIT-скомпилированном коде хранение указатель, затем его приращение и сохранение данных - очень разумная вещь. Вы можете подумать, что это «зло», но на низком уровне это действительно то, чего вы ожидаете от спецификации JVM. (Между прочим, я слышал о реальных программах, работающих в JRockit, страдающих от этой проблемы - это не чисто теоретическое.)
Если вы знаете, что в вашем приложении есть ошибки синхронизации, но в текущей JVM на вашем текущем оборудовании нет сбоев, тогда (a) поздравляем; и (b) сейчас настало время начать «спокойно идти к пожарному выходу», исправить свой код и обучить своих программистов, прежде чем вам потребуется обновить слишком много компонентов.