1、双重锁单例模式
注意成员变量instance前要加volatile,让在多线程下instancene内存可见,否则多线程下就不会是单例的了。
public class Singleton1 {

private static volatile Singleton1 instance;
private Singleton1(){
}
public static Singleton1 getInstance(){
    if(instance==null){
        synchronized (Singleton1.class){
            if(instance==null){
                instance = new Singleton1();
            }
        }
    }
    return instance;
}

}
2、静态内部类之单例模式(推荐)
因为Inner是静态的,只会在使用时会被加载且只会加载一次,性能较好。
public class Singleton2 {

private Singleton2(){

}
private static class Inner{
    private static final Singleton2 instance = new  Singleton2();
}
public static Singleton2 getInstance(){
    return Inner.instance;
}

}
3、枚举之单例模式(推荐)
枚举是线程安全的,并且其构造函数只会被装载一次,只会创建一次Singleton3,所以它是单例的。
public class Singleton3 {

private Singleton3(){
}
private enum Singlon{
    INSTANCE;
    private final Singleton3 instance;
    Singlon(){
        instance = new Singleton3();
    }
    public Singleton3 getInstance(){
        return instance;
    }
}
public static Singleton3 getInstance(){
    return Singlon.INSTANCE.getInstance();
}

}


平安
1 声望0 粉丝