Home

fangxiaogang

我可以!

Home About Github Email

2017-06-13
真正完美的单例是什么样的

今天发现了一个新的知识,就是单例的写法,很多人都会说,写个单例而已,so eazy ,其实里面还有很多门道,比如我经常写的都是这样的单例:

1
2
3
4
5
6
7
8
9
10
public class Single {
private static Single instance;
private Single() {}
public static Single getInstance() {
if (instance == null) {
instance = new Single();
}
return instance;
}
}

其实几乎完美的单例写法是以下这样的,双重检查模式。大名鼎鼎的 EventBus 的 getDefault() 方法就是这样写的。此方法最大的不完美应该就是显得不够简洁,哈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Single {
private static volatile Single instance;
private Single() {}
public static Single getInstance() {
if (instance == null) {
synchronized (Single.class) {
if (instance == null) {
instance = new Single();
}
}
}
return instance;
}
}

fangxiaogang

scribble

Home About Github Email