Double Checked Locking(ダブルチェックロッキング)

2010.6頃にその名を聞いて、変数の参照がsynchronizedの外にも及んでいると、意図しない動きになるんだなぁと、ざっくり感じた程度でした。

それが、JDK5からはvolatileで宣言することで、問題なく動作する。。
それは、変数がreleaseされてからacquire出来るよう、プチ同期が行われるようになっため。と今はざっくり理解したつもりです。
※1.4以前はだめ。

volatileが無いと、環境によってwhile(true)になっちゃう。とか、どこかで見た記憶があるけど、もうわからない。。

プログラム、奥が深い。