Java设计模式-单例模式-静态内部类
- 2020 年 3 月 17 日
- 筆記
静态内部类特点
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