单例的7种写法

时间:2022-08-12 20:47:35
懒汉模式-线程不安全 12345678910111213
public class Singleton {
private static Singleton instance;
private Singleton (){

}

public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
懒汉模式-线程安全 12345678910111213
public class Singleton {
private static Singleton instance;
private Singleton (){

}

public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉模式 1234567891011
public class Singleton {
private static Singleton instance = new Singleton();

private Singleton (){

}

public static Singleton getInstance() {
return instance;
}
}
饿汉模式-变种 1234567891011121314
public class Singleton {
private Singleton instance = null;

static {
instance = new Singleton();
}

private Singleton (){

}
public static Singleton getInstance() {
return this.instance;
}
}
静态内部类 12345678910111213
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}

private Singleton (){

}

public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
双重校验锁 12345678910111213141516
public class Singleton {
private volatile static Singleton singleton;
private Singleton (){

}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
枚举 12345
public enum Singleton {  
INSTANCE;
public void whateverMethod() {
}
}