Java單例模式兩種實用有趣的寫法

1.內(nèi)部類實現(xiàn)

Class Singleton{

? ?private static class HelperHolder{

? ?public static final Helper helper=new Helper();

? ?}

? ? public static Helper newInstance(){

? ? ? ? return HelperHolder.helper;

? ? }

}

為什么說有趣呢,內(nèi)部類的實現(xiàn)能夠延遲初始化(Lazy initialization),并且多線程安全,還保證了高性能

為什么會延遲初始化呢,因為java的語言特性,內(nèi)部類只有在使用的時候才會去加載,從而初始化內(nèi)部靜態(tài)變量。

為什么沒有加線程鎖會是線程安全的呢,Java運行環(huán)境自動給你保證的,加載的時候會自動隱形同步。

為什么是高性能呢,在訪問對象時,不需要同步java虛擬機,又會自動給你取消息同步,所以效率高。

2.枚舉實現(xiàn)

public enum Singleton{

? ? ? ? INSTANCE;

? ? ? ? private Singleton(){

? ? ? ? }

? ? public Helper newInstance(){

? ? ? return new Helper();

? ? ? }

}

枚舉的實現(xiàn) 即使使用反射機制也無法多次實例化一個枚舉量,也是線程安全的

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 源自《JAVA編程思想》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容