Теория
Где именно может возникнуть ошибка без volatile в Double-Checked Locking?
Без использования ключевого слова volatile в паттерне Double-Checked Locking (DCL) может возникнуть проблема с видимостью и переупорядочиванием инструкций.
Читать ответ