单例模式(双锁式的设计)
一、先用锁,后判断是否为空 //保障了单例模式,但不管实例化没,每一个线程都会经过锁,浪费资源,
二、先判断,后用锁 //判断了有没实例化,而后一个一个经过锁,都会再一次实例化,单例模式失败
三、先判断,后用锁,再判断 //判断了有没实例化,而后一个一个经过锁,其中一个实例化,后面的既无法再次实例化,保障了单例模式,也节省了资源

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