欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java單例模式學習示例

 更新時間:2014年01月11日 15:09:57   作者:  
java中單例模式是一種常見的設計模式,單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種,下面提供了單例模式的示例

單例模式有一下特點:
1、單例類只能有一個實例。
2、單例類必須自己自己創(chuàng)建自己的唯一實例。
3、單例類必須給所有其他對象提供這一實例。
單例模式確保某個類只有一個實例,而且自行實例化并向整個系統(tǒng)提供這個實例。在計算機系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業(yè)同時輸出到打印機中。每臺計算機可以有若干通信端口,系統(tǒng)應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用??傊?,選擇單例模式就是為了避免不一致狀態(tài),避免政出多頭。

首先看一個經(jīng)典的單例實現(xiàn)。

復制代碼 代碼如下:

public class Singleton {

private static Singleton uniqueInstance = null;

private Singleton() {

   // Exists only to defeat instantiation.

}

public static Singleton getInstance() {   if (uniqueInstance == null) {

       uniqueInstance = new Singleton();

   }

   return uniqueInstance;

}

// Other methods...
}

Singleton通過將構造方法限定為private避免了類在外部被實例化,在同一個虛擬機范圍內,Singleton的唯一實例只能通過getInstance()方法訪問。(事實上,通過Java反射機制是能夠實例化構造方法為private的類的,那基本上會使所有的Java單例實現(xiàn)失效。此問題在此處不做討論,姑且掩耳盜鈴地認為反射機制不存在。)

但是以上實現(xiàn)沒有考慮線程安全問題。所謂線程安全是指:如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變量的值也和預期的是一樣的,就是線程安全的。或者說:一個類或者程序所提供的接口對于線程來說是原子操作或者多個線程之間的切換不會導致該接口的執(zhí)行結果存在二義性,也就是說我們不用考慮同步的問題。顯然以上實現(xiàn)并不滿足線程安全的要求,在并發(fā)環(huán)境下很可能出現(xiàn)多個Singleton實例。

復制代碼 代碼如下:

//餓漢式單例類.在類初始化時,已經(jīng)自行實例化
public class Singleton1 {
//私有的默認構造子
private Singleton1() {}
//已經(jīng)自行實例化
private static final Singleton1 single = new Singleton1();
//靜態(tài)工廠方法
public static Singleton1 getInstance() {
return single;
}
}

//懶漢式單例類.在第一次調用的時候實例化
public class Singleton2 {
//私有的默認構造子
private Singleton2() {}
//注意,這里沒有final
private static Singleton2 single=null;
//靜態(tài)工廠方法
public synchronized static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}

相關文章

  • 詳解Spring Boot中初始化資源的幾種方式

    詳解Spring Boot中初始化資源的幾種方式

    這篇文章主要介紹了詳解Spring Boot中初始化資源的幾種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • java 并發(fā)中的原子性與可視性實例詳解

    java 并發(fā)中的原子性與可視性實例詳解

    這篇文章主要介紹了java 并發(fā)中的原子性與可視性實例詳解的相關資料,原子性是說一個操作是否可分割??梢娦允钦f操作結果其他線程是否可見。需要的朋友可以參考下
    2017-07-07
  • Java虛擬機JVM性能優(yōu)化(二):編譯器

    Java虛擬機JVM性能優(yōu)化(二):編譯器

    這篇文章主要介紹了Java虛擬機JVM性能優(yōu)化(二):編譯器,本文先是講解了不同種類的編譯器,并對客戶端編譯,服務器端編譯器和多層編譯的運行性能進行了對比,然后給出了幾種常見的JVM優(yōu)化方法,需要的朋友可以參考下
    2014-09-09
  • SpringBoot 整合Tess4J庫實現(xiàn)圖片文字識別案例詳解

    SpringBoot 整合Tess4J庫實現(xiàn)圖片文字識別案例詳解

    Tess4J是一個基于Tesseract OCR引擎的Java接口,可以用來識別圖像中的文本,說白了,就是封裝了它的API,讓Java可以直接調用,今天給大家分享一個SpringBoot整合Tess4j庫實現(xiàn)圖片文字識別的小案例
    2023-10-10
  • Java設計模式之單例模式實例詳解【懶漢式與餓漢式】

    Java設計模式之單例模式實例詳解【懶漢式與餓漢式】

    這篇文章主要介紹了Java設計模式之單例模式,簡單說明了單例模式的原理并結合具體實例形式分析了單例模式中懶漢式與餓漢式的具體實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-09-09
  • Java模仿微信實現(xiàn)零錢通簡易功能(兩種版本)

    Java模仿微信實現(xiàn)零錢通簡易功能(兩種版本)

    本文主要介紹了使用Java開發(fā)零錢通項目, 模仿微信實現(xiàn)簡易功能,可以完成收益入賬,消費,查看明細,退出系統(tǒng)等功能。文中一共介紹了兩種實現(xiàn)方法,快來學習吧
    2021-12-12
  • Spring中事務傳播行為的介紹

    Spring中事務傳播行為的介紹

    今天小編就為大家分享一篇關于Spring中事務傳播行為的介紹,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java?泛型的上界和下界通配符示例詳解

    Java?泛型的上界和下界通配符示例詳解

    這篇文章主要為大家通過示例介紹了Java?泛型的上界和下界通配符,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 如何解決線程太多導致java socket連接池出現(xiàn)的問題

    如何解決線程太多導致java socket連接池出現(xiàn)的問題

    這篇文章主要介紹了如何解決線程太多導致socket連接池出現(xiàn)的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • java + dom4j.jar提取xml文檔內容

    java + dom4j.jar提取xml文檔內容

    這篇文章主要為大家詳細介紹了java + dom4j.jar提取xml文檔內容,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論