シングルトンなクラスを定義するために以下のように記述されたコードをよく目にする。 class Singleton { private volatile static Singleton instance; public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { if (instance == null) { instance = new Singleton(); //(1) } } } return instance; } これは、1度しかinstanceを生成できないことを保証して、かつ最小限の同期処理でシングルトンを実現するための「二重チェック」イディオムを使ったコードなんだけど、このコードはjava1.4以前では正しく機能しない。(1)の箇所で「アウ