Think Twice
IT技術メモ | Javaのメモ
Created: 2008-04-10 / Updated: 2008-04-10

Javaでシングルトンを実現するならInitialize-On-Demand Holderイディオムを使うといいらしい §

当メモは2008-04-10に投稿されたものを加筆修正し、再掲したものです。

目次§


Initialize-On-Demand Holder§

(2008-04-10 作成)

忘れないようにメモ。

Javaでシングルトンを実現しようとする際のクラス生成イディオム。
double-checked locking問題をすっぱりと解決したもので、スレッドセーフな上に高速であり、混乱も少ないのが特徴。 簡単!安全!すっきりキレイ!

class Singleton {
    /** インスタンスホルダー */
    private static class Holder {
        public static final Singleton instance = new Singleton();
    };
        :
        :
        :
    /** コンストラクタは封印 */
    private Singleton(){};

    /** 唯一のSingletonインスタンスをゲット! */
    public static Singleton getInstance() {
        return Holder.instance;
    } 
}

要するに、Singleton#getInstance()呼び出し時に、プライベートインナークラスのHolderinstanceに最初にアクセスしたタイミングで、Singletonのインスタンスが唯一生成される。
このタイミングは排他されるんで、synchronizedしなくてもよい。ってな具合です。

このページのトップへ

参考§

(2008-04-10 作成)

元記事

参考記事

関連

このページのトップへ