单例模式(懒汉方式和饿汉方式)+双重检验锁

单例模式(懒汉方式和饿汉方式)+双重检验锁

单例模式的概念:

单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
  • 1)一个类只有一个实例 这是最基本的
  • 2)它必须自行创建这个实例
  • 3)它必须自行向整个系统提供这个实例

私有成员变量

    private static Singleton singleton ;
    private static Properties properties;

私有构造 将构造方法私有化,不允许外部直接创建对象

private Singleton(){
        InputStream is=null;

        try {
            properties=new Properties();
            //把配置文件加载到is流
            is=Singleton.class.getClassLoader().getResourceAsStream("database.properties");
            //通过Properties读取is流
            properties.load(is);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                if(is!=null){
                    is.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

饿汉模式

在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
- 创建类的唯一实例
- 静态,不用同步(类加载时已初始化,不会有多线程的问题)

public static  Singleton getinstance(){   
        if(singleton==null){
            singleton=new Singleton();
        }
        return singleton;
    }

懒汉模式

Singleton类进内存,对象还没有存在,只有调用getInstance方法,才建立对象
比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
公开访问点getInstance—–不需要同步,因为在类加载时已经初始化完毕,也不需要判断null,直接返回

public static synchronized Singleton getinstance(){   
            singleton =new Singleton ();
            return singleton ;
    }

双重检验锁

public static synchronized Singleton getinstance(){
        if(singleton==null){
            synchronized (Singleton .class) {
                if(singleton ==null){
                    singleton =new Singleton ();
            }
        }
        }
        return singleton;
    }

通过键取得值

*提供一个用于获取实例的方法 使用public static修饰符*
*面向对象的封装性要求控制访问,不允许其他类直接访问本类的成员变量(私有化)*

public static String  getvalues(String key){
        return properties.getProperty(key); 
    }

总结:

为什么要用单例模式:

*单利模式是用来保证一个类在运行期间只会被创建一个实例,节省系统的运行内存,选择单例模式就是为了避免不一致状态,避免政出多头。*

怎么选择单例模式(饿汉模式和懒汉模式区别):

*饿汉模式:类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在 *
*懒汉模式:懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。*

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值