美文网首页
单例懒汉实现方式

单例懒汉实现方式

作者: 程序员大亨 | 来源:发表于2020-11-17 16:03 被阅读0次
    package singleton;
    
    /**
     * @program: DesignPatterns
     * @description: 单例设计模式-懒汉实现方式
     * @author: 刘泽
     * @create: 2020-11-17 15:28
     */
    public class SingletonLazy {
    //    private static SingletonLazy instance;
    
        /**
         * 私有化构造函数
         */
        private SingletonLazy() {
        }
    
        /**
         * 第一种多线程下线程不安全
         *
         * @return
         */
    ///    public static SingletonLzay getInstance() {
    ///        if (instance == null) {
    ///            instance = new SingletonLzay();
    ///        }
    ///        return instance;
    ///    }
    
        /**
         * 第二种
         * 通过加锁保证单例(采用synchronized 加锁对方法加锁有很大的性能开销)
         * 解决办法 :锁粒度放小
         *
         * @return : singleton.SingletonLzay
         * @author: 刘泽
         * @date: 2020/11/17 3:37 下午
         */
    //    public static synchronized SingletonLazy getInstance() {
    //        if (instance == null) {
    //            instance = new SingletonLazy();
    //        }
    //        return instance;
    //    }
    
        /**
         * 第三种 锁粒度放小
         * DCL 双重检查锁定(保证多线程下保持高性能)
         *
         * @return : singleton.SingletonLazy
         * @author: 刘泽
         * @date: 2020/11/17 3:41 下午
         */
    //    public static SingletonLazy getInstance() {
    //        if (instance == null) {
    //            //A,B
    //            synchronized (SingletonLazy.class) {
    //                if (instance == null) {
    //                    instance = new SingletonLazy();
    //                }
    //            }
    //        }
    //        return instance;
    //    }
        /**
         * volatile 关键字 禁止指令重排
         */
        private static volatile SingletonLazy instance;
        /**
         * 懒汉
         *
         * @return : singleton.SingletonLazy
         * @author: 刘泽
         * @date: 2020/11/17 4:01 下午
         */
        public static SingletonLazy getSingletonLazy() {
            //第一重校验
            if (instance == null) {
                //加锁
                synchronized (SingletonLazy.class) {
                    //第二重校验
                    if (instance == null) {
                        instance = new SingletonLazy();
                    }
                }
            }
            return instance;
        }
    
        public void property() {
            System.out.println("调用成功");
        }
    }
    
    

    相关文章

      网友评论

          本文标题:单例懒汉实现方式

          本文链接:https://www.haomeiwen.com/subject/igoxiktx.html