// 1.饿汉
public class Singleton1 {
private static Singleton1 instance = new Singleton1();
private Singleton1() {
}
public static Singleton1 getInstance() {
return instance;
}
}
// 2.懒汉
public class Singleton2 {
private static Singleton2 instance = null;
private Singleton2() {
}
public static synchronized Singleton2 newInstance() {
if (instance == null) {
instance = new Singleton2();
}
return instance;
}
}
// 3.懒汉双重检验锁DCL(推荐)
public class Singleton3 {
private static volatile Singleton3 instance;
private Singleton3() {
}
public static Singleton3 getInstance() {
try {
// 双重校验锁DCL,保证线程安全和运行效率
if (instance == null) {
Thread.sleep(1000);
synchronized (Singleton3.class) {
if (instance == null) {
instance = new Singleton3();
}
}
}
} catch (InterruptedException e) {
}
return instance;
}
}
// 4.静态内部类
public class Singleton4 {
private Singleton4() {
}
private static class SingletonHolder {
private static Singleton4 instance = new Singleton4();
}
public static Singleton4 getInstance() {
try {
// 模拟业务逻辑延时
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return SingletonHolder.instance;
}
}
// 5.枚举
public enum Singleton5 {
instance;
public void whateverMethod() {
}
}