单例模式(双锁式的设计)
一、先用锁,后判断是否为空 //保障了单例模式,但不管实例化没,每一个线程都会经过锁,浪费资源,
二、先判断,后用锁 //判断了有没实例化,而后一个一个经过锁,都会再一次实例化,单例模式失败
三、先判断,后用锁,再判断 //判断了有没实例化,而后一个一个经过锁,其中一个实例化,后面的既无法再次实例化,保障了单例模式,也节省了资源
public class Object(){
pravte static Object o;
pravte Object(){}
public static Object getObject() {
if (o == null) {
synchronized (Object.class) {
if (o == null) {
o= new Object();
}
}
}
return o;
}
}
饿汉式
public class Object {
private static Object o = new Object();
private Object (){}
public static Object geto() {
return o;
}
}