饿汉式
public class Singleton {
private static final Singleton singleton = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
}
懒汉式
public class Singleton2 {
private static Singleton2 singleton;
private Singleton2() {
}
public synchronized static Singleton2 getInstance() {
if (singleton == null) {
singleton = new Singleton2();
}
return singleton;
}
}
懒汉式双检锁
public class Singleton3 {
private static volatile Singleton3 singleton;
private Singleton3() {
}
public static Singleton3 getInstance() {
if (singleton == null) {
synchronized (Singleton3.class) {
if (singleton == null) {
singleton = new Singleton3();
}
}
}
return singleton;
}
}
静态内部类
public class Singleton4 {
private Singleton4() {
}
private static class SingletonInstance {
private static final Singleton4 singleton = new Singleton4();
}
public static Singleton4 getInstance() {
return SingletonInstance.singleton;
}
}
枚举
public enum Singleton5 {
INSTANCE;
public static Singleton5 getInstance() {
return INSTANCE;
}
}