java单例设计模式懒汉_java单例设计模式之懒汉模式

单例设计模式:顾名思义就是某个对象永远只有一个,绝对不可以出现第二个

单例模式种类:懒汉模式和饿汉模式

懒汉模式:意思就是在你要使用我这个对象的时候,我判断该对象为null的时候我才创建,而不是像饿汉模式一开始就创建好

实现代码展示:

package com.rabbit.pattren;

/**

* TODO java单例设计模式-懒汉模式

* create 2017年3月5日 下午9:53:52

* @author rabbit先生

*/

public class SingletonPattern1 {

private static SingletonPattern1 sp = null;

//私有构造不允许私自创建对象

private SingletonPattern1() { }

//提供方法获取唯一对象

/**

* 特别说明:为什么要使用2次判断null

* 首先可以假设使用一个判断情况:就是3和5的代码去掉

* 在多线程下首先线程A执行代码1,判断sp对象是null准备创建对象

* 但是在这个时候线程B抢到执行1,那么线程B也判断到sp对象是null

* 然后线程B创建了对象,并返回了(执行完毕)

* 线程B执行完毕,到线程A执行了,我们刚才说到线程A已经判断了sp对象是null,已经执行了1的代码

* 线程A继续执行,由于线程A判断sp是null,所有也创建了一个sp对象并返回

* 这个时候线程A和B各自创建了一个对象,所有确保不了对象的唯一

* 这就是为什么使用2次判断null的原因

* 就算出现上面的情况,也会在重新判断一次,只要进入了2的代码那么2-6这段的代码一点会一起执行,别人是抢不了执行的

*/

private static SingletonPattern1 getInstance() {

if (sp == null) {//1

synchronized (SingletonPattern1.class){//2

if (sp == null) {//3

sp = new SingletonPattern1();//4

}//5

}//6

}//7

return sp;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值