两种单例模式

public class Singleton {
        // 声明私有化的一个构造方法覆盖原有的公共的构造方法。保证外部类创建不了该类的对象。
        private Singleton() {
        }

        // 该类自己创建一个自己的唯一对象。因为外部类创建不了本类的对象所以使用static修饰。使外部类可以通过类名点的方式直接调用。
        // 因为是static修饰的所以当该类加载的时候就会加载 所以本单利模式称为饿汉式单利模式 线程安全的
        private static Singleton singleton = new Singleton();

        // 声明一个静态的方法,返回本类的唯一对象
        public static Singleton getInstent() {
            return singleton;
        }
    }

    class Singleton_1 {
        // 声明私有化的一个构造方法覆盖原有的公共的构造方法。保证外部类创建不了该类的对象。
        private Singleton_1() {
        }

        // 因为只有外部类调用的时候才会创建本类的对象 所以本单利模式称为懒汉式单利模式 线程不安全的
        private static Singleton_1 singleton_1;

        // 声明一个静态的方法,返回本类的唯一对象,添加同步修饰保证线程安全
        public static synchronized Singleton_1 getInstent() {
            if (singleton_1 == null) {
                singleton_1 = new Singleton_1();
            }
            return singleton_1;
        }
    }

    class Test {
        public static void main(String[] str) {
            Singleton s1 = Singleton.getInstent();
            Singleton s2 = Singleton.getInstent();
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s1 == s2);
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_39513166/article/details/78904878