静态内部类单例

作者:陆金龙    发表时间: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的双重检查锁定的单例方案还可以用于对实例字段的延迟初始化