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

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

ID:62033638

大小:19.50 KB

頁數(shù):6頁

時間:2021-04-15

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

《JAVA中單例模式的幾種實現(xiàn)方式.doc》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。

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

2、if( instance== null)?。閚stance =newSingleton(); return instance;  }?。∥覀冋f過這種實現(xiàn)方式不是thread—safe的,那么可以把上面的方法變成線程安全的嗎?當然可以,在方法getInstance()上加上synchronized修飾符就可以實現(xiàn)方法的同步了。但是這樣系統(tǒng)開銷會很大。具體代碼如下:publicClassSingleton{ privatestat(yī)icSingletoninstance?。絥ull;  privateSingleton(){}  public? stat

3、icsynchronized? SingletongetInstance()?。f( instance==null)  instance=?。頴wSingleton(); returninstance;  }} 每次有線程調用getInstance()方法,都需要同步判斷。這顯然不是最好的選擇,下面將會陸續(xù)介紹幾種thread-safe的方法?!?兩種lazyloaded thread—safe的單例模式實現(xiàn)方式1)DCL(double?。鉮eckedlocking實現(xiàn)法)doublecheckedlocking,顧名思義,就是雙檢查法,檢查實例

4、INSTANCE是否為null或者已經(jīng)實例化了。下面是具體的實現(xiàn)代碼:1publicclassDoubleCheckedLockingSingleton{?。????? privatevolatile DoubleCheckedLockingSingletonINSTANCE; 3 4????? privateDoubleCheckedLockingSingleton(){}  5 6?????publicDoubleCheckedLockingSingletongetInstance(){?。?????????if(INSTANCE==null){

5、  8???????????? synchronized(DoubleCheckedLockingSingleton.class){ 9????????????????//doublecheckingSingletoninstance 10?????????????????。椋妫↖NSTANCE==null){ 11????????????????????INSTANCE=new?。膐ubleCheckedLockingSingleton();12???????????????? }  13????????????} 14?????????}15??

6、???????returnINSTANCE; 16?????} 17} 這種方法也很好理解,我們可以看到有兩次對instance是否為null的判斷:如果第一次判斷不為空,則直接返回實例就可以了;如果instance為空,則進入同步代碼塊再進行null值判斷,再選擇是否實例化。第一個null判斷可以減少系統(tǒng)的開銷。在實際項目中做過多線程開發(fā)的都應該知道DCL.2)lazyinitializationholderclass模式實現(xiàn)法下面是這種方法的實現(xiàn)代碼:publicclassSingleton { /**?。惣壍膬炔款?,也就是靜態(tài)的成員式內部類,

7、該內部類的實例與外部類的實例  *沒有綁定關系,而且只有被調用到才會裝載,從而實現(xiàn)了延遲加載 */ ?。餽ivat(yī)estat(yī)ic classSingletonHolder{ /** ?。o態(tài)初始化器,由JVM來保證線程安全 */ privat(yī)estat(yī)icSingletoninstance=newSingleton();  }/**?。∷接谢瘶嬙旆椒ā。 rivate Singleton(){ ?。ublicstat(yī)ic?SingletongetInstance(){ return SingletonHolder.instance;?。?/p>

8、 } 當getInstance方法第一次被調用的時候,它第一次讀取SingletonHolder.insta

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

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

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