hooyantsing's Blog

P35 单例(静态内部类)

字数统计: 290阅读时长: 1 min
2020/11/08

尚硅谷Java设计模式(图解+框架源码剖析)

静态内部类

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

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

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

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

结论:推荐使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Singleton {
// 1.构造器私有化,防止外部new
private Singleton(){}

// 2.实现内部类。外部类加载的时候不会加载内部类,只有当调用getInstance方法时,才调用内部类。懒加载效果。
private static class SingleInstance {
private static final Singleton INSTANCE = new Singleton();
}

// 3.提供一个公有的静态方法,返回实例对象
public static Singleton getInstance(){
return SingleInstance.INSTANCE;
}
}
CATALOG
  1. 1. 静态内部类