单例设计模式:顾名思义就是某个对象永远只有一个,绝对不可以出现第二个
单例模式种类:懒汉模式和饿汉模式
懒汉模式:意思就是在你要使用我这个对象的时候,我判断该对象为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;
}
}