学习路径:https://coding.imooc.com/learn/list/270.html
- 前言
加锁可以解决饿汉式单例模式的线程安全。
【饿汉式】https://blog.youkuaiyun.com/chenghan_yang/article/details/90447741
-
静态内部类
静态内部类实现单例模式,本质也是【加锁】,只不过该锁加在【类加载的过程】
public class StaticInnerClassSingleton {
// 私有构造函数,保证不能被外部new出来
private StaticInnerClassSingleton() {}
private static class InnerClass {
private static StaticInnerClassSingleton staticInnerClassSingleton = new StaticInnerClassSingleton();
}
public static StaticInnerClassSingleton getInstance() {
return InnerClass.staticInnerClassSingleton;
}
}
jvm启动后 静态内部类不会被直接加载。 只有在使用静态内部类的时候,他才会加载
外部调用getInstance()方法后,会触发InnerClass的加载,任意一个线程获取该【类加载】的锁后,就能保证StaticInnerClassSingleton首次给new出来,只有一个线程进入该内部类。加载完成后,static成员变量是唯一的。