JAVA中單例模式的幾種實現(xiàn)方式

JAVA中單例模式的幾種實現(xiàn)方式

ID:40199669

大?。?4.50 KB

頁數(shù):5頁

時間:2019-07-25

JAVA中單例模式的幾種實現(xiàn)方式_第1頁
JAVA中單例模式的幾種實現(xiàn)方式_第2頁
JAVA中單例模式的幾種實現(xiàn)方式_第3頁
JAVA中單例模式的幾種實現(xiàn)方式_第4頁
JAVA中單例模式的幾種實現(xiàn)方式_第5頁
資源描述:

《JAVA中單例模式的幾種實現(xiàn)方式》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、JAVA中單例模式的幾種實現(xiàn)方式1線程不安全的實現(xiàn)方法  首先介紹java中最基本的單例模式實現(xiàn)方式,我們可以在一些初級的java書中看到。這種實現(xiàn)方法不是線程安全的,所以在項目實踐中如果涉及到線程安全就不會使用這種方式。但是如果不需要保證線程安全,則這種方式還是不錯的,因為所需要的開銷比較小。下面是具體的實現(xiàn)代碼:  publicClassSingleton  {  privatestaticSingletoninstance=null;  privateSingleton(){}  public?staticSingletongetI

2、nstance()  {  if(instance==null)  instance=newSingleton();  returninstance;  }  }  我們說過這種實現(xiàn)方式不是thread-safe的,那么可以把上面的方法變成線程安全的嗎?當然可以,在方法getInstance()上加上synchronized修飾符就可以實現(xiàn)方法的同步了。但是這樣系統(tǒng)開銷會很大。具體代碼如下:  publicClassSingleton  {  privatestaticSingletoninstance=null;  privateSin

3、gleton(){}  public?staticsynchronized?SingletongetInstance()  {  if(instance==null)  instance=newSingleton();  returninstance;  }  }  每次有線程調(diào)用getInstance()方法,都需要同步判斷。這顯然不是最好的選擇,下面將會陸續(xù)介紹幾種thread-safe的方法?! ?兩種lazyloadedthread-safe的單例模式實現(xiàn)方式  1)DCL(doublecheckedlocking實現(xiàn)法)  do

4、ublecheckedlocking,顧名思義,就是雙檢查法,檢查實例INSTANCE是否為null或者已經(jīng)實例化了。下面是具體的實現(xiàn)代碼:  1publicclassDoubleCheckedLockingSingleton{  2?????privatevolatileDoubleCheckedLockingSingletonINSTANCE;  3  4?????privateDoubleCheckedLockingSingleton(){}  5  6?????publicDoubleCheckedLockingSingleton

5、getInstance(){  7?????????if(INSTANCE==null){  8????????????synchronized(DoubleCheckedLockingSingleton.class){  9????????????????//doublecheckingSingletoninstance  10????????????????if(INSTANCE==null){  11????????????????????INSTANCE=newDoubleCheckedLockingSingleton();  1

6、2????????????????}  13????????????}  14?????????}  15?????????returnINSTANCE;  16?????}  17}  這種方法也很好理解,我們可以看到有兩次對instance是否為null的判斷:如果第一次判斷不為空,則直接返回實例就可以了;如果instance為空,則進入同步代碼塊再進行null值判斷,再選擇是否實例化。第一個null判斷可以減少系統(tǒng)的開銷。在實際項目中做過多線程開發(fā)的都應(yīng)該知道DCL.2)lazyinitializationholderclass模式

7、實現(xiàn)法  下面是這種方法的實現(xiàn)代碼:  publicclassSingleton{  /**  *類級的內(nèi)部類,也就是靜態(tài)的成員式內(nèi)部類,該內(nèi)部類的實例與外部類的實例  *沒有綁定關(guān)系,而且只有被調(diào)用到才會裝載,從而實現(xiàn)了延遲加載  */  privatestaticclassSingletonHolder{  /**  *靜態(tài)初始化器,由JVM來保證線程安全  */  privatestaticSingletoninstance=newSingleton();  }  /**  *私有化構(gòu)造方法  */  privateSingleto

8、n(){  }  publicstatic?SingletongetInstance(){  returnSingletonHolder.instance;  }  }  當getInstan

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。