生活随笔
收集整理的這篇文章主要介紹了
Java单例模式优化写法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自?http://blog.csdn.net/diweikang/article/details/51354982
Java單例模式優化寫法
方法一:推薦
[java]?view plain
?copy public?class?SingletonClass?{?? ?????? ??private?static?class?SingletonClassInstance?{?? ????private?static?final?SingletonClass?instance?=?new?SingletonClass();?? ??}?? ?? ??public?static?SingletonClass?getInstance()?{?? ????return?SingletonClassInstance.instance;?? ??}?? ?? ??private?SingletonClass()?{?? ?? ??}?? ?????? }??
實際情況是,單例模式使用內部類來維護單例的實現,JVM內部的機制能夠保證當一個類被加載的時候,這個類的加載過程是線程互斥的。這樣當我們第一次調用getInstance的時候,JVM能夠幫我們保證instance只被創建一次,并且會保證把賦值給instance的內存初始化完畢。同時該方法也只會在第一次調用的時候使用互斥機制,這樣就解決了低性能問題
在這一版本的單例模式實現代碼中,我們使用了Java的靜態內部類。這一技術是被JVM明確說明了的,因此不存在任何二義性。在這段代碼中,因為SingletonClass沒有static的屬性,因此并不會被初始化。直到調用getInstance()的時候,會首先加載SingletonClassInstance類,這個類有一個static的SingletonClass實例,因此需要調用SingletonClass的構造方法,然后getInstance()將把這個內部類的instance返回給使用者。由于這個instance是static的,因此并不會構造多次。
由于SingletonClassInstance是私有靜態內部類,所以不會被其他類知道,同樣,static語義也要求不會有多個實例存在。并且,JSL規范定義,類的構造必須是原子性的,非并發的,因此不需要加同步塊。同樣,由于這個構造是并發的,所以getInstance()也并不需要加同步。
方法二:
[java]?view plain
?copy public?class?SingletonTest?{???? ?? ????private?static?SingletonTest?instance?=?null;???? ???? ????private?SingletonTest()?{???? ????}???? ???? ????private?static?synchronized?void?syncInit()?{???? ????????if?(instance?==?null)?{???? ????????????instance?=?new?SingletonTest();???? ????????}???? ????}???? ???? ????public?static?SingletonTest?getInstance()?{???? ????????if?(instance?==?null)?{???? ????????????syncInit();???? ????????}???? ????????return?instance;???? ????}???? }??
方法三:
[java]?view plain
?copy public?class?SingletonClass?{?? ?? ??private?static?SingletonClass?instance?=?null;?? ?? ??public?static?SingletonClass?getInstance()?{?? ????if?(instance?==?null)?{?? ??????synchronized?(SingletonClass.class)?{?? ????????if?(instance?==?null)?{?? ??????????instance?=?new?SingletonClass();?? ????????}?? ??????}?? ????}?? ????return?instance;?? ??}?? ?? ??private?SingletonClass()?{?? ?? ??}?? ?? }??
參考:http://devbean.blog.51cto.com/448512/203501/
??????????? http://blog.csdn.net/longyulu/article/details/9159589
總結
以上是生活随笔為你收集整理的Java单例模式优化写法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。