11

Java は、JVM ごとに ENUM のインスタンスが 1 つだけ存在することを内部的にどのように保証しますか? アプリケーションの起動時に作成され、その時点から複数のスレッドがアクセスすると、起動時に作成されたオブジェクトが返されるだけですか?
それとも、シングルトン パターンに似た何らかの二重同期を実装して、複数のスレッドがアクセスしても 1 つのインスタンスのみが作成されるようにしますか?

4

2 に答える 2

7

この回答でわかるように、列挙型インスタンスは静的クラス フィールドであるため、最初にクラスにアクセスしたときにクラスの読み込みの一部として初期化されます。

クラスローディングは内部的に同期されるため、列挙型インスタンスがシングルトン (同じクラスローダー内のシングルトン、つまり、複数のローダーによってロードされた同じ列挙型がある場合、複数のインスタンスが取得されます) になります。

于 2013-08-27T17:14:19.550 に答える
3

Enum インスタンスは、クラスのロード時に作成されます。同じ列挙型が複数のクラスローダによってロードされる場合 (クラスローディング ゲームが Web アプリ コンテナなどによってプレイされている場合)、メモリ内に複数の互換性のないインスタンスが存在します。

于 2013-08-27T17:14:41.903 に答える