優(yōu)缺點(diǎn)說(shuō)明
1)起到了lazy loading的效果管挟,但是只能在單線程下使用
2)如果在多線程下,一個(gè)線程進(jìn)入了 if(singleton == null)判斷語(yǔ)句塊,還沒(méi)有來(lái)得及往下執(zhí)行,另一個(gè)線程也通過(guò)了這個(gè)判斷語(yǔ)句雨效,這時(shí)便會(huì)產(chǎn)生多個(gè)實(shí)例,所以在多線程環(huán)境下不可使用這種方式
3)在實(shí)際開(kāi)發(fā)種废赞,不要使用這種方式
public class SingletonTest02 {
public static void main(String[] args) {
Singleton02 instance = Singleton02.getInstance();
Singleton02 instance01 = Singleton02.getInstance();
System.out.println(instance == instance01);
System.out.println("instance,hashCode = " + instance.hashCode());
System.out.println("instance01,hashCode = " + instance01.hashCode());
}
}
class Singleton02{
private static Singleton02 singleton;
private Singleton02(){}
public static Singleton02 getInstance(){
if(singleton == null){
singleton = new Singleton02();
}
return singleton;
}
}
// 運(yùn)行結(jié)果
true
instance,hashCode = 1846274136
instance01,hashCode = 1846274136