Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Java 如何在内部确保每个 JVM 只存在一个 ENUM 实例?它是在应用程序启动时创建的,并且从那时起当多个线程访问它时,它只会返回启动时创建的对象吗? 或者它是否实现了某种类似于单例模式的双重同步,这样即使多个线程访问它,也只会创建一个实例?
正如您在此答案中所读到的,枚举实例是静态类字段,因此在您第一次访问该类时被初始化为类加载的一部分。
类加载在内部同步,以确保枚举实例是单例(同一个类加载器中的单例,也就是说。如果您有多个加载器加载相同的枚举,您将获得多个实例)
枚举实例是在类加载时创建的。如果同一个枚举被多个类加载器加载(例如,当一个类加载游戏正在由一个 Web 应用程序容器运行时),您将在内存中拥有多个不兼容的实例。