单利模式:一个应用中有且只有该类的一个的对象
//饿汉式
public class SingleTon {
//1、私有化构造方法
private SingleTon() {
}
//2、提供对象引用
public static SingleTon singleTon = new SingleTon();
//3、提供方法供外部获取实例对象
public static SingleTon getInstance() {
return singleTon;
}
}
//懒汉式
public class SingleFullTon {
private SingleFullTon() {
}
public static SingleFullTon singleFullTon;
public static SingleFullTon getInstance() {
if (null == singleFullTon) {
singleFullTon = new SingleFullTon();
}
return singleFullTon;
}
}
//DCL模式
//双重检测锁:Double Check Lock
public class SingleDCLTon {
private SingleDCLTon(){}
public static SingleDCLTon singleDCLTon;
public static SingleDCLTon getInstance(){
if (null == singleDCLTon){
synchronized (SingleDCLTon.class){
if (null == singleDCLTon){
singleDCLTon = new SingleDCLTon();
}
}
}
return singleDCLTon;
}
}
两者区别
懒汉式:
1、私有化构造方法
2、提供私有化静态本类对象
3、提供静态同步方法,返回本类对象,返回之前先判断对象是否为空,为空则创建对象
恶汉式:
1、私有化其构造方法
2、提供私有化静态本类对象
3、提供静态公共方法获取该类对象
同步锁
start->就绪状态->争夺CPU执行权->运行run方法->死亡状态
开启A,B线程(非同步)
A:if(utils==null):true
B:判断:true 创建对象 返回
A:创建对象 返回
开启A,B线程(同步)
A:加锁 判断:true
B:判断是否上锁 上锁 等待
A: 创建对象 返回 解锁
B:加锁 判断:false 返回 解锁