package com.design.patterns;
/**
*
* @author Fighting
*1.类的构造器私有化
*2.静态内部类方式在 SafeInnerSingleton 类被装载时并不会立即实例化,而是在需要实例化时,调用 getInstance 方法,才会装载 SingletonInstance 类,从而完成 SafeInnerSingleton 的实例化。
*3.类的静态属性只会在第一次加载类的时候初始化,所以在这里,JVM 帮助我们保证了线程的安全性,在类进行初始化时,别的线程是无法进入的??
*/
public class LazyLoadInnerClassThreadSafeSingleton {
public static void main(String[] args) {
SafeInnerSingleton lazyNotSafeSingleton = SafeInnerSingleton.getInstance();
SafeInnerSingleton lazyNotSafeSingleton2 = SafeInnerSingleton.getInstance();
// 比较两个对象是否相等
System.out.println(lazyNotSafeSingleton == lazyNotSafeSingleton2);
// 查看两个对象的Hash值是否相同
System.out.println(lazyNotSafeSingleton);
System.out.println(lazyNotSafeSingleton2);
}
}
class SafeInnerSingleton{
private SafeInnerSingleton(){}
private static class SingletonInstance{
private final static SafeInnerSingleton INSTANCE = new SafeInnerSingleton();
}
public static SafeInnerSingleton getInstance(){
return SingletonInstance.INSTANCE;
}
}