0

指定されたリンクで、指定されたオプションを見て、このコードで最悪のことを説明するオプションを選択してください。

https://gist.github.com/d34th4ck3r/49e9ae56458d4ed0f8ae

4

3 に答える 3

4

Mango の複数のインスタンスを作成できます

はい: 2 つのスレッドがgetInstance同時に実行される場合、両方がINSTANCEnull を認識し、新しいインスタンスを作成する可能性があります。

マンゴーは決して作られません

あれ… を呼ぶgetInstanceとインスタンスが生成されるので、いいえ。

コンストラクターはプライベートであり、呼び出すことはできません

いいえ、クラス内から呼び出すことができますgetInstance

value はガベージ コレクションされる可能性があり、getInstance の呼び出しはガベージ データを返す場合があります。

INSTANCE到達可能である限り、ガベージ コレクションは行われません - 静的変数の場合、つまり JVM の存続期間中 (*)。

(*) より正確には、クラスがロードされている限り、ガベージ コレクションは行われません。関連するクラスローダー自体がガベージ コレクションされている場合、クラスはアンロードされる可能性があります。

于 2013-03-14T12:07:44.047 に答える
0

これは古典的なシングルトン オブジェクトの設計パターンです。

何が最悪かは、要件によって異なります。これがより大きなプログラムのクラスである場合、私の理解によれば、マンゴーは一度しか作られるべきではありません.

assyliasが言ったように、同期されたキーワードがあるまで、結果はmangoの2つのオブジェクトにつながる可能性があります(ただし、それはまれなケースです)

synchronized public static Mango getInstance()
    {
        if ( INSTANCE == null )
        {
            INSTANCE = new Mango();
        }
        return INSTANCE;
    }
于 2013-03-14T12:14:11.930 に答える
0

答えはオプションAだと思います:「Mangoの複数のインスタンスを作成できます」適切な同期がなければ、2つ以上のスレッドが同時に getInstance() を呼び出し、Mangoを非修飾シングルトンにする可能性があります

ちなみに、これは宿題や面接の質問のようです!:)

于 2013-03-14T12:14:42.460 に答える