懶漢式
public class SingleBean {
/**
* 懶漢式
*/
// 當(dāng)重排序成 1 -> 3 -> 2 的時(shí)候可能出問題
// 通過 volatile 修復(fù)
private static volatile SingleBean Instance = null;
public SingleBean() {
}
public static SingleBean getInstance() {
if(Instance==null){
synchronized (SingleBean.class){
/**此處對(duì)類加鎖湿颅,如果在線程1發(fā)現(xiàn)instance為空后蛮拔,線程2搶占到了執(zhí)?權(quán)放闺,也進(jìn)?了判斷哀蘑,
接著兩個(gè)線程都發(fā)現(xiàn)instance為空,將會(huì)創(chuàng)建兩個(gè)不同的instance對(duì)象返回,所以這就不能保證單例模式,即不是線程安全的。**/
if (Instance ==null){// 搶到鎖后再次檢驗(yàn)役纹,保證只會(huì)被實(shí)例化一次
Instance = new SingleBean();
}
}
}
return Instance;
}
}
餓漢式
public class SingleBean2 {
private static final SingleBean2 Instance = new SingleBean2();
//餓漢式
public SingleBean2(){
}
public static SingleBean2 getInstance() {
return Instance;
}
}