测试类
public class SingletonDemo {
public static void main(String[] args) {
System.out.println(Singleton1.getInstance());
System.out.println(Singleton2.getInstance());
System.out.println(Singleton3.getInstance());
System.out.println(Singleton4.getInstance());
System.out.println(Singleton5.INSTANCE);
}
}
单例模式
1. 饿汉模式
class Singleton1 {
private static final Singleton1 singleton1 = new Singleton1();
private Singleton1() {}
public static Singleton1 getInstance() {
return singleton1;
}
}
2. 懒汉模式,对整个方法加锁
class Singleton2 {
private static volatile Singleton2 singleton2;
private Singleton2() {}
public static synchronized Singleton2 getInstance() {
if (null == singleton2) {
singleton2 = new Singleton2();
}
return singleton2;
}
}
3. 懒汉模式,对关键语句加锁
class Singleton3 {
private volatile static Singleton3 singleton3;
private Singleton3() {}
public static Singleton3 getInstance() {
if (null == singleton3) {
synchronized (Singleton3.class) {
if (null == singleton3) {
singleton3 = new Singleton3();
}
}
}
return singleton3;
}
}
4. 静态内部类实现懒汉模式
class Singleton4 {
public Singleton4() {
}
public static Singleton4 getInstance() {
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder {
public static Singleton4 INSTANCE = new Singleton4();
}
}
5. 枚举形式的单例,简单安全
enum Singleton5 {
INSTANCE;
}