饿汉式(可阻止反射)
public class Singleton {
private Singleton(){
if (INSTANCE!=null){
throw new RuntimeException("单例已经创建!");
}
}
private static final Singleton INSTANCE=new Singleton();
public static Singleton getInstance(){
return INSTANCE;
}
}
2.枚举饿汉式
public enum Singleton {
INSTANCE;
Singleton(){};
public static Singleton getInstance(){
return INSTANCE;
}
}
3.懒汉式(多线程不安全)
public class Singleton {
private Singleton(){}
private static Singleton INSTANCE=null;
private static Singleton getInstance(){
if (INSTANCE==null){
INSTANCE=new Singleton();
}
return INSTANCE;
}
}
4.双检锁懒汉式(线程安全)
public class Singleton {
private Singleton(){}
private static volatile Singleton INSTANCE=null;
private static Singleton getInstance(){
if (INSTANCE==null){
if (INSTANCE==null){
synchronized(Singleton.class){
INSTANCE=new Singleton();
}
}
}
return INSTANCE;
}
}
5.内部类懒汉式(线程安全)
public class Singleton {
private Singleton(){}
private static class Holder{
static Singleton INSTANCE=new Singleton();
}
public static Singleton getInstance(){
return Holder.INSTANCE;
}
}