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();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。