いまさらdouble-checked locking問題
友人に聞かれたので、ちょっとあいまいになっていた記憶を呼び覚ますためにdouble-checked lockingについて調査。
以下のページにまとめられていた。
要約:
- JDK1.5からはメモリモデルが変更になっているため、Singletonオブジェクトを格納するフィールドをvolatileにすればdouble-checked lockingイディオムは正常に動作する
- が、volatileを使っている時点でパフォーマンスは低下するので、本末転倒ぎみ
というわけで、JDK1.5以上であっても、Singletonパターンを使う場合はdouble-checked lockingを使わない方法を考えたほうがいいみたい。