JAVA常用的单例模式 饿汉式、双检查锁、静态内部类、枚举
单例模式
1. 饿汉式
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class SingleTon { private final static SingleTon INSTANCE = new SingleTon(); private SingleTon() {
}
public static SingleTon getInstance() { return INSTANCE; }
public void method() { System.out.println("SingleTon"); } }
|
2. 双检锁(懒汉式)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class SingleTonDCL { private volatile static SingleTonDCL singleton;
private SingleTonDCL() { }
public static SingleTonDCL getInstance() { if (singleton == null) { synchronized (SingleTonDCL.class) { if (singleton == null) { singleton = new SingleTonDCL(); } } } return singleton; }
public void method() { System.out.println("SingleTonDCL"); } }
|
3. 静态内部类(懒汉式)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class SingleTonInnerClass {
private SingleTonInnerClass() { }
public static SingleTonInnerClass getInstance() { return SingleTonHolder.INSTANCE; }
private static class SingleTonHolder { private static final SingleTonInnerClass INSTANCE = new SingleTonInnerClass(); }
public void method() { System.out.println("SingleTonInnerClass"); } }
|
4. 枚举模式(-)
1 2 3 4 5 6 7 8 9 10
| public enum SingleTonEnum {
INSTANCE;
public void method() { System.out.println("SingleTonEnum"); } }
|
参考链接
Java单例模式的7种写法中,为何用Enum枚举实现被认为是最好的方式?