0

このインスタンス化方法について質問があります。

このウェブサイトから、次のように書かれています。

class Singleton
{
    private static Singleton instance;

    private Singleton()
    {
    System.out.println("Singleton(): Initializing Instance");
    }

    public static Singleton getInstance()
    {
        if (instance == null)
        {
            synchronized(Singleton.class)
            {
                if (instance == null)
                {
                    System.out.println("getInstance(): First time getInstance was invoked!");
                    instance = new Singleton();
                }
            }            
        }

        return instance;
    }

    public void doSomething()
    {
        System.out.println("doSomething(): Singleton does something!");
    }
}

ただし、Elisabeth Freeman、Eric Freeman、Bert Bates、Kathy Sierra、Elisabeth Robson による本「Head First Design Pattern」から、同じ方法を使用してシングルトンをインスタンス化しますが、唯一の違いは、プライベート静的メンバーを宣言し、volatileそれらをリムにすることです。それを宣言することについてのポイントはかなりvolatileです。スレッド間の適切な「happnens-before 関係」を確立するために、同期された「クリティカル ゾーン」を宣言するだけでは十分ではないでしょうか?

4

1 に答える 1