0%

JAVA常用的单例模式

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 {
/**
* SingleTonEnum
*/
INSTANCE;

public void method() {
System.out.println("SingleTonEnum");
}
}

参考链接

Java单例模式的7种写法中,为何用Enum枚举实现被认为是最好的方式?