public class Singleton{
private static final Singleton singleton;
private Singleton(){
}
public static final synchronized Singleton getInstance(){
if(singleton==null){
singleton=new Singleton();
}
return singleton;
}
}
雙重檢查鎖:線程安全,根據需求使用
public class Singleton{
private volatile static Singleton singleton;
private Singleton(){
}
public static final Singleton getInstance(){
if(singleton==null){
synchronized(Singleton.class){
if(singleton==null){
singleton=new Singleton();
}
}
}
return singleton;
}
}
靜態內部類鎖:線程安全,比較推薦
public class Singleton{
private Singleton(){
}
private static class Holder{
public static final Singleton singleton=new Singleton();
}
public static final Single getInstance(){
return Holder.singleton;
}
}
餓汗式:線程安全,但沒有實現懶加載
public class Singleton{
private static final Singleton singleton=new Singleton();
private Singleton(){
}
public static final Singleton getInstance(){
return singleton;
}
}
枚舉:線程安全,但比較少人用
public class Singleton{
public enum EasySingleton{
INSTANCE;
}
}