Java设计模式-单例模式-静态内部类

静态内部类特点

1)外部类装载的时候,静态内部类不会状态

2)静态类所在的外部类使用内部类时,静态内部类会装载

3)静态内部类在装载时是线程安全的,只会装载一次

使用单例-静态内部类优缺点分析

1)这种方式采用了类装载的机制来保证初始化实例时只有一个线程

2)静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化

3)类的静态属性只会在第一次加载类的时候初始化,所以在这里,JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程是无法进入的

4)优点:避免了线程不安全,利用静态内部类特点实现延迟加载,效率高

5)结论:推荐使用

public class SingletonTest07 {
    public static void main(String[] args) {
        Singleton07 instance  = Singleton07.getInstance();
        Singleton07 instance01 = Singleton07.getInstance();

        System.out.println(instance == instance01);
        System.out.println("instance,hashCode= " + instance.hashCode());
        System.out.println("instance01,hashCode = " + instance01.hashCode());
    }
}

class Singleton07{
    private static volatile Singleton07 instance;
    private Singleton07(){}
    private static class SingletonInstance{
        private static final Singleton07 INSTANCE = new Singleton07();
    }
    public static synchronized Singleton07 getInstance(){
        return SingletonInstance.INSTANCE;
    }
}

// 运行结果
true
instance,hashCode= 1846274136
instance01,hashCode = 1846274136

你可能感兴趣的:(Java设计模式-单例模式-静态内部类)