いまさらdouble-checked locking問題

友人に聞かれたので、ちょっとあいまいになっていた記憶を呼び覚ますためにdouble-checked lockingについて調査。

以下のページにまとめられていた。

要約:

  • JDK1.5からはメモリモデルが変更になっているため、Singletonオブジェクトを格納するフィールドをvolatileにすればdouble-checked lockingイディオムは正常に動作する
  • が、volatileを使っている時点でパフォーマンスは低下するので、本末転倒ぎみ

というわけで、JDK1.5以上であっても、Singletonパターンを使う場合はdouble-checked lockingを使わない方法を考えたほうがいいみたい。