Double Checked Locking(ダブルチェックロッキング)
2010.6頃にその名を聞いて、変数の参照がsynchronizedの外にも及んでいると、意図しない動きになるんだなぁと、ざっくり感じた程度でした。
それが、JDK5からはvolatileで宣言することで、問題なく動作する。。
それは、変数がreleaseされてからacquire出来るよう、プチ同期が行われるようになっため。と今はざっくり理解したつもりです。
※1.4以前はだめ。
volatileが無いと、環境によってwhile(true)になっちゃう。とか、どこかで見た記憶があるけど、もうわからない。。
プログラム、奥が深い。