java如何延迟加载类,关于java:具有延迟加载功能的单元素枚举类型单例

我读过许多论坛和帖子,都讨论了用Java实现单调模式的不同风格,似乎"枚举是在Java中实现单调模式的最佳方法"!

我想知道如何使用Java枚举在具有延迟加载功能的Java中实现SingleTone模式。 因为枚举只是类。 第一次使用类时,它会由JVM加载,并完成所有静态初始化。 枚举成员是static,因此都将被初始化。

有谁知道我如何使用带有延迟加载支持的枚举?

您对延迟加载的一小句话未提及的是,JVM以线程安全的方式进行了延迟加载。 这就是为什么使用这种惰性类加载是首选方法的原因-JVM处理所有同步。

Java的可能重复项:延迟初始化Singleton

您阅读的消息人士说这是做懒惰单身人士的最简单方法的原因是因为它应该可以正常工作。 尝试这个:

public class LazyEnumTest {

public static void main(String[] args) throws InterruptedException {

System.out.println("Sleeping for 5 seconds...");

Thread.sleep(5000);

System.out.println("Accessing enum...");

LazySingleton lazy = LazySingleton.INSTANCE;

System.out.println("Done.");

}

}

enum LazySingleton {

INSTANCE;

static { System.out.println("Static Initializer"); }

}

这是我在控制台中得到的输出:

$ java LazyEnumTest

Sleeping for 5 seconds...

Accessing enum...

Static Initializer

Done.

The first time a class is used, it gets loaded by the JVM and all of its static initialization is done. the enum members are static , so they're all going to be initialized.

实际上,类加载器仅在您首次访问此类后才加载类(听起来很有趣)。 访问enum-singleton类的唯一原因就是获取它的实例。

这就是为什么Java中的单元素枚举类型单调称为惰性的原因-在首次访问它之前,不会初始化其值。

类似问题:

Java:懒惰初始化Singleton

延迟加载的单例:双重检查锁定与按需持有人习惯用法的初始化

谢谢您的解释。 这里还有更多:为什么枚举单例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值