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