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;
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值