欧美一级内谢_91中文字幕在线_羞羞视频官网_亚洲日韩中文字幕天堂不卡_在线观看日韩一区_国产成人激情

北京北大青鳥學(xué)校學(xué)員總結(jié):java單例設(shè)計模式(二)

大家好,我是北京北大青鳥學(xué)校軟件工程師培訓(xùn)課程的一名學(xué)員。上一篇文章中,我根據(jù)自己的理解,總結(jié)了java單例設(shè)計模式的幾種方式。這篇文章,我將繼續(xù)總結(jié),并希望大家和北京北大青鳥學(xué)校的老師給予建議和指導(dǎo)。

第六種(枚舉):

Java代碼
public enum Singleton { 
    INSTANCE; 
    public void whateverMethod() { 
    } 

這種方式不僅能避免多線程同步問題,而且還能防止反序列化重新創(chuàng)建新的對。不過,個人認(rèn)為由于1.5中才加入enum特性,用這種方式寫不免讓人感覺生疏,在實(shí)際工作中,我也很少看見有人這么寫過。(北京北大青鳥學(xué)校,北大青鳥課程)


第七種(雙重校驗(yàn)鎖):

Java代碼
public class Singleton { 
    private volatile static Singleton singleton; 
 
    public static Singleton getSingleton() { 
    if (singleton == null) { 
        synchronized (Singleton.class) { 
        if (singleton == null) { 
            singleton = new Singleton(); 
        } 
        } 
    } 
    return singleton; 
    } 
}  (北京北大青鳥學(xué)校,北大青鳥課程

 這個是第二種方式的升級版,俗稱雙重檢查鎖定。在JDK1.5之后,雙重檢查鎖定才能夠正常達(dá)到單例效果。

總結(jié)

有兩個問題需要注意:

1.如果單例由不同的類裝載器裝入,那便有可能存在多個單例類的實(shí)例。假定不是遠(yuǎn)端存取,例如一些servlet容器對每個servlet使用完全不同的類裝載器,這樣的話如果有兩個servlet訪問一個單例類,它們就都會有各自的實(shí)例。

2.如果Singleton實(shí)現(xiàn)了java.io.Serializable接口,那么這個類的實(shí)例就可能被序列化和復(fù)原。不管怎樣,如果你序列化一個單例類的對象,接下來復(fù)原多個那個對象,那你就會有多個單例類的實(shí)例。(北京北大青鳥學(xué)校,北大青鳥課程)

對第一個問題修復(fù)的辦法是:

Java代碼
private static Class getClass(String classname)     
                                         throws ClassNotFoundException {    
      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();    
     
      if(classLoader == null)    
         classLoader = Singleton.class.getClassLoader();    
     
      return (classLoader.loadClass(classname));    
   }    

對第二個問題修復(fù)的辦法是:

Java代碼
public class Singleton implements java.io.Serializable {    
   public static Singleton INSTANCE = new Singleton();    
     
   protected Singleton() {    
       
   }    
   private Object readResolve() {    
            return INSTANCE;    
      }   
}   (北京北大青鳥學(xué)校,北大青鳥課程
 
我個人比較喜歡第三種和第五種方式,簡單易懂,而且在JVM層實(shí)現(xiàn)了線程安全(如果不是多個類加載器環(huán)境),一般的情況下,我會使用第三種方式,只有在要明確實(shí)現(xiàn)lazy loading效果時才會使用第五種方式,另外,如果涉及到反序列化創(chuàng)建對象時我會試著使用枚舉的方式來實(shí)現(xiàn)單例,不過,我一直會保證我的程序是線程安全的,而且我永遠(yuǎn)不會使用第一種和第二種方式,如果有其他特殊的需求,我可能會使用第七種方式,畢竟,JDK1.5已經(jīng)沒有雙重檢查鎖定的問題了。以上是我的總結(jié),希望北京北大青鳥學(xué)校老師幫助提些建議。

北京北大青鳥學(xué)校學(xué)術(shù)老師評價:這位學(xué)員總結(jié)的很到位,很不錯。不過一般來說,第一種不算單例,第四種和第三種就是一種,如果算的話,第五種也可以分開寫了。所以說,一般單例都是五種寫法。

北京北大青鳥學(xué)校學(xué)術(shù)老師鼓勵今后有更多的北京北大青鳥學(xué)校學(xué)員能與老師一起交流,這樣才能提高學(xué)員的技術(shù)能力。想要了解北大青鳥好嗎?北大青鳥怎么樣?北大青鳥課程?北大青鳥學(xué)費(fèi)多少等問題,歡迎您與通州北大青鳥網(wǎng)站在線老師聯(lián)系

北大青鳥網(wǎng)上報名
北大青鳥招生簡章
主站蜘蛛池模板: 成人免费视频 | 久久久国产精品入口麻豆 | 久久噜噜噜精品国产亚洲综合 | 在线亚洲人成电影网站色www | 国产真实乱全部视频 | 欧美在线视频一区二区 | 日韩视频高清 | 亚洲国产一区二区三区 | 日韩在线中文字幕 | 国产免费一区二区三区最新6 | 成人免费在线观看 | 欧美久久久电影 | 黄免费观看视频 | 日韩精品在线一区 | 国产免费观看久久黄av片涩av | 国产欧美一区二区三区久久人妖 | 成人免费看片网 | 99在线免费观看视频 | 麻豆va| .国产精品成人自产拍在线观看6 | 中文字幕一区在线观看视频 | 中文字幕亚洲一区 | 嫩草懂你的影院入口 | 国产麻豆乱码精品一区二区三区 | 97综合在线 | 一区二区在线不卡 | 精品一区二区三区免费毛片 | 亚洲综合在线视频 | 久久久九九 | 美女黄网站 | 亚洲欧美激情精品一区二区 | 国产精品区一区二 | 亚洲一区二区在线播放 | 成人激情视频免费在线观看 | av手机在线播放 | 自拍偷拍亚洲一区 | 国产精品视频导航 | 午夜激情小视频 | 国产精品永久 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 中文字幕视频在线 |