美文网首页
单例模式

单例模式

作者: Edison_Tu | 来源:发表于2019-01-19 17:25 被阅读0次
    模式告白

    我在任何时候都只有一个对象,常被用来管理共享资源,例如数据库的连接,线程池等。

    定义

    确保一个类只有一个实例,并提供一个全局访问点。

    代码样例
    懒汉方式
    
    public class HungrySingleton {
        //利用一个静态变量来记录HungrySingleton类的唯一实例
        private static HungrySingleton instance = new HungrySingleton();
        //构造器声明为私有的,只有HungrySingleton类才可以调用
        private HungrySingleton(){
    
        }
        public static HungrySingleton getInstance(){
            return instance;
        }
    }
    
    
    饿汉方式

    利用双重检查加锁(double-checked locking),首先检查实例是否已经创建了,如果尚未创建,“才”进行同步。这样一来,只有第一次会同步,改做法可以减少getInstance()的时间消耗。

    
    public class LazySingleton {
        /**
         * 利用一个静态变量来记录HungrySingleton类的唯一实例;
         * volatile 关键字确保,当instace变量被初始化为LazySingleton实例时,多个线程正确地处理instance变量.
        **/
        private volatile static LazySingleton instance;
        //构造器声明为私有的,只有HungrySingleton类才可以调用
        private LazySingleton(){
    
        }
        //用“双重检查加锁”,在getInstance()中减少使用同步
        public static LazySingleton getInstance(){
            if(instance == null){
                synchronized (LazySingleton.class){
                    if(instance == null){
                        instance = new LazySingleton();
                    }
                }
            }
            return instance;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:单例模式

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