方法一
/**
* 性能差---原因:每次调用方法之前先加锁
**/
public class GetInstanceSingleton {
private GetInstanceSingleton(){}
private static GetInstanceSingleton getInstanceSingleton;
public static synchronized GetInstanceSingleton getInstance(){
if (getInstanceSingleton==null){
getInstanceSingleton=new GetInstanceSingleton();
}
return getInstanceSingleton;
}
}
方法二
/**
* 不管用到用不到,先在类加载时初始化,浪费内存
* **/
public class FirstNewSingleton {
private static FirstNewSingleton firstNewSingleton=new FirstNewSingleton();
private FirstNewSingleton(){}
public static FirstNewSingleton getInstance(){
return firstNewSingleton;
}
}
方法三
/**
* 双重枷锁
* java5以上版本才适用
* **/
class DoubleLockSingleton{
private volatile static DoubleLockSingleton doubleLockSingleton;
private DoubleLockSingleton(){}
public static DoubleLockSingleton getInstance(){
if(doubleLockSingleton==null){
synchronized (DoubleLockSingleton.class){
if (doubleLockSingleton==null){
doubleLockSingleton=new DoubleLockSingleton();
}
}
}
return doubleLockSingleton;
}
}