静态内部类单例
作者:陆金龙
发表时间:2023-01-10 22:11
关键词:
1.静态内部类单例
public class Instance { private static class InstanceHolder { public static Instance instance = new Instance(); } private Instance() {} public static Instance getInstance() { return InstanceHolder.instance ; } }
静态内部类单例综合使用了java的类级内部类和多线程缺省同步锁的特性,同时实现了延迟加载和线程安全。(1)类级在内部类里面创建对象实例,类级内部类相当于其外部类的成员,只有在第一次被使用的时候才会被JVM装载。(2)利用类初始化机制,不存在多线程并发问题,不需要加锁。
静态内部类单例与基于volatile的双重检测单例相比,实现更简单,代码更简洁。
说明:
1.类级内部类指的是,有static修饰的成员内部类。如果没有static修饰的成员式内部类被称为对象级内部类。
2.多线程缺省同步锁的知识
由静态初始化器(在静态字段上或static{}块中的初始化器)初始化数据时,JVM已经隐含地执行了同步,不需要再进行同步控制。
2.与volatie双重检查单例的比较
类级内部类单例的实现代码更简洁,但只能用于静态字段的初始化。
基于volatile的双重检查锁定的单例方案还可以用于对实例字段的延迟初始化。