以前、Javaではダブルチェックイディオムを使ってはいけないと言われていた。Effective Java第1版にもダメと書かれていたのだが、Effective Java 読書会 12 日目 「スレッド・セーフってなによ!!」 - IT戦記によると、第2版では遅延初期化の方法として掲載されているらしい。 ちょっと調べてみた。 JDK5 and later extends the semantics for volatile so that the system will not allow a write of a volatile to be reordered with respect to any previous read or write, and a read of a volatile cannot be reordered with respect to any follow