Java单例模式复习(三)

心血来潮,在学学单例模式,以下是代码块:具备前面两种实现方式,

package singleton;

public class SingletonStatic {
    private SingletonStatic() {
        System.out.println("static SingletonStatic is create");
    }

    private static class SingletonHander {
        private static SingletonStatic instance = new SingletonStatic();
    }

    public static SingletonStatic getInstance() {
        return SingletonHander.instance;
    }
}
/**
 * 当SingletonStatic 被加载的时候,起内部类不会被初始化,所以当SingletonStatic类被载入JVM时,不会初始化单例类,
 * 而当getInstance()方法被调用时,才会加载SingletonHander,而初始化instance,由于实例的建立是在类加载完成时完成,
 * 所以对线程友好的,故不需要使用synchronized关键字修饰,这中方式兼备了前面两种单例模式存在的问题,
 * 但是也还有其他情况,可能导致系统产生多个实例,比如通过反射机制,强行调用单例类的私有构造函数,生成多个单例,等
 */



欢迎关注公众号:Java后端技术全栈