11

Java 如何在内部确保每个 JVM 只存在一个 ENUM 实例?它是在应用程序启动时创建的,并且从那时起当多个线程访问它时,它只会返回启动时创建的对象吗?
或者它是否实现了某种类似于单例模式的双重同步,这样即使多个线程访问它,也只会创建一个实例?

4

2 回答 2

7

正如您在此答案中所读到的,枚举实例是静态类字段,因此在您第一次访问该类时被初始化为类加载的一部分。

类加载在内部同步,以确保枚举实例是单例(同一个类加载器中的单例,也就是说。如果您有多个加载器加载相同的枚举,您将获得多个实例)

于 2013-08-27T17:14:19.550 回答
3

枚举实例是在类加载时创建的。如果同一个枚举被多个类加载器加载(例如,当一个类加载游戏正在由一个 Web 应用程序容器运行时),您将在内存中拥有多个不兼容的实例。

于 2013-08-27T17:14:41.903 回答