????Double CheckLock(???У????)
????DCL??????????????????????????????????????????????????????????????????getInstance????????????
public class Singleton {
//private static volatile Singleton instance = null;
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
//????????????????????λ???????
if(instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
return instance;
}
}
???????????getInstance??????instance???????????п????????ж????????????????????????????ж?????????????null??????′???????????棬????????????£?
???????????A??е?instance=new Singleton()??????????????????????????????????????????????????????????????????????????????3?????飺
????1????Singleton????????????
????2??????Singleton()?? ???????????????γ??
????3????instance??????з????????????instance????null???
?????????????Java?????????д???????????У????jdk1.5??Java????????Cache???????????????д????漲???????????????????????????????????????????????1-2-3???????1-3-2.???????????????3???????2δ??????????л??????B????????instance???????????A?????3???instance??????null?????????B??????instance??????????????????DCL?Ч??????????????????????????????????????????á?
??????jdk1.5??????????????????????????JMM?????廯??volatile???????????????1.5??????汾????????instance???????private static volatile Singleton instance = null;??????instance??????ζ??????????ж???????????DCL??д???????????????????volatile??????????????????????????????????????????????????
????DCL????????????????????????getInstance??????????????????Ч????
???????????μ??????????????Java????????????????????????????????????????????????????????С??
????DCL?????????????????????????????????????????????????????????????????±?????????????????????????????????????????????jdk1.6?汾??????????????????????????????
????????????????
???????Java????????????????????????DCL??????????????????????′????????
public class Singleton {
private Singleton() {}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
//????????
private static class SingletonHolder {
private static final Singleton instance = new Singleton();
}
}
??????????μ???Singleton?????????????instance????е???ε???Singleton??getInstance??????????instance?????????????????ε???getInstance?????????????????SingletonHolder???????????????????????????????????????????????????????????????????????????????????????????
??????????
public enum Singleton {
//???????????????????Singleton????????
INSTANCE;
public void doSomething() {
}
}
//???
public static void main(String[] args){
Singleton singleton = Singleton.instance;
singleton.doSomething();
}
????д???????????????????????Java??????????????????????????????Σ???????????????????????????????????????????????????????κ?????????????????????
??????????????????????????????????У??????????????????????′?????????????????????л???
??????????л??????????????????????д????????????????????????Ч????????????????????????е???????л????????????????????????????????μ?????????????????????????????л???????????????????????????о????????е??????????????readResolve()?????????????????????????????????л??????磬????????????????????????????????????л??????????????????????????·?????
????private Object readResolve() throws ObjectStreamException {
????return instance;
????}
?????????readResolve?????н?instance?????????????????????????????μ?????????????????????????????????????????л?????????????????μ??????
???????????????
public class SingletonManager {
private static Map<String??Object> objMap = new HashMap<String??Object>();
public static void registerService(String key??Object instance) {
if (!objMap.containsKey(key)) {
objMap.put(key);
}
}
public static getInstance(String key) {
return objMap.get(key);
}
}
?????????????????????????????????????????У?????????key????????????????????????????????????????????????????????????????????????????л???????????????????????ó??????????????????????????????????
???????
??????????????????????????????????????????????и??????????????????????????????????????????????????????Ч???????????????У???????????????????
???????
????· ???????????????????????????????????濪???????????????????????????????????????????????????????????????????????????????????
????· ????????????????????????????????????????????????????????????????????????????????á?????????????????????????????????????????????????????????????????????
????· ?????????????????????????????????д??????????????????????????????У????????????????????д??????
????· ????????????????????????????????????????????磬????????????????????????????????????
???????
????· ???????????н????????????????????????????????????е???????????????
????· ??Android?У????????????????Context??????????????????й???????????????????????Context????Application Context??