亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java中單例模式的幾種實現方式

2019-11-06 06:11:50
字體:
來源:轉載
供稿:網友

學習java的同學注意了?。。?nbsp;學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!

1 線程不安全的實現方法

首先介紹java中最基本的單例模式實現方式,我們可以在一些初級的java書中看到。這種實現方法不是線程安全的,所以在項目實踐中如果涉及到線程安全就不會使用這種方式。但是如果不需要保證線程安全,則這種方式還是不錯的,因為所需要的開銷比較小。下面是具體的實現代碼:

 

復制代碼
public Class Singleton{  PRivate static Singleton instance = null;  private Singleton(){}  public  static Singleton getInstance()  {     if( instance == null)        instance = new Singleton ();     return instance;  }}    復制代碼

 

我們說過這種實現方式不是thread-safe的,那么可以把上面的方法變成線程安全的嗎?當然可以,在方法getInstance()上加上synchronized修飾符就可以實現方法的同步了。但是這樣系統開銷會很大。具體代碼如下:

 

復制代碼
public Class Singleton{  private static Singleton instance = null;  private Singleton(){}  public  static synchronized  Singleton getInstance()  {     if( instance == null)        instance = new Singleton ();     return instance;  }}    復制代碼

每次有線程調用getInstance()方法,都需要同步判斷。這顯然不是最好的選擇,下面將會陸續介紹幾種thread-safe的方法。

 

2 兩種lazy loaded thread-safe的單例模式實現方式

1) DCL (double checked locking 實現法)

    double checked locking ,顧名思義,就是雙檢查法,檢查實例INSTANCE是否為null或者已經實例化了。下面是具體的實現代碼:

復制代碼
 1 public class DoubleCheckedLockingSingleton{ 2      private volatile DoubleCheckedLockingSingleton INSTANCE; 3   4      private DoubleCheckedLockingSingleton(){} 5   6      public DoubleCheckedLockingSingleton getInstance(){ 7          if(INSTANCE == null){ 8             synchronized(DoubleCheckedLockingSingleton.class){ 9                 //double checking Singleton instance10                 if(INSTANCE == null){11                     INSTANCE = new DoubleCheckedLockingSingleton();12                 }13             }14          }15          return INSTANCE;16      }17 }復制代碼

這種方法也很好理解,我們可以看到有兩次對instance是否為null的判斷:如果第一次判斷不為空,則直接返回實例就可以了;如果instance為空,則進入同步代碼塊再進行null值判斷,再選擇是否實例化。第一個null判斷可以減少系統的開銷。在實際項目中做過多線程開發的都應該知道DCL。

 

2) lazy initialization holder class 模式實現法

下面是這種方法的實現代碼:

復制代碼
public class Singleton {    /**     * 類級的內部類,也就是靜態的成員式內部類,該內部類的實例與外部類的實例     * 沒有綁定關系,而且只有被調用到才會裝載,從而實現了延遲加載     */    private static class SingletonHolder{        /**         * 靜態初始化器,由JVM來保證線程安全         */        private static Singleton instance = new Singleton();    }    /**     * 私有化構造方法     */    private Singleton(){    }    public static  Singleton getInstance(){        return SingletonHolder.instance;    }}復制代碼

 

當getInstance方法第一次被調用的時候,它第一次讀取SingletonHolder.instance,導致SingletonHolder類得到初始化;而這個類在裝載并被初始化的時候,會初始化它的靜態域,從而創建Singleton的實例,由于是靜態的域,因此只會被虛擬機在裝載類的時候初始化一次,并由虛擬機來保證它的線程安全性。這個模式的優勢在于,getInstance方法并沒有被同步,并且只是執行一個域的訪問,因此延遲初始化并沒有增加任何訪問成本。

 

關于延遲初始化(lazy loaded)

“除非絕對必要,否則就不要延遲初始化”。延遲初始化是一把雙刃劍,它降低了初始化類或者創建實例的開銷,卻增加了訪問被延遲初始化的域的開銷,考慮到延遲初始化的域最終需要初始化的開銷以及域的訪問開銷,延遲初始化實際上降低了性能。

 

3 靜態工廠實現法

  因為單例是靜態的final變量,當類第一次加載到內存中的時候就初始化了,其thread-safe性由JVM來負責保證。值得注意的是這個實現方式不是lazy-loadedd的。   具體實現代碼如下:

復制代碼
 1 public class Singleton{ 2     //initailzed during class loading 3     private static final Singleton INSTANCE = new Singleton(); 4   5     private Singleton(){} 6   7     public static Singleton getSingleton(){ 8         return INSTANCE; 9     }10 }復制代碼

 

4 枚舉實現單例(Enum Singleton)

  枚舉單例(Enum Singleton)是實現單例模式的一種新方式,枚舉這個特性是在Java5才出現的,在《Effective Java》一書中有介紹這個特性。下面是這種方法的具體實現代碼:

復制代碼
public enum Singleton {      INSTANCE("hello") {          public void someMethod() {              // . . .          }      };      private String name;    private void PrintName(){System.out.println(name);}    protected abstract void someMethod();  } 復制代碼

你可以通過Singleton.INSTANCE來訪問該單示例變量。默認枚舉實例的創建是線程安全的,但是在枚舉中的其他任何方法由程序員自己負責。如果你正在使用實例方法,那么你需要確保線程安全(如果它影響到其他對象的狀態的話)。傳統單例存在的另外一個問題是一旦你實現了序列化接口,那么它們不再保持單例了,但是枚舉單例,JVM對序列化有保證。枚舉實現單例的好處:有序列化和線程安全的保證,代碼簡單。

學習Java的同學注意了?。?! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!


上一篇:Java事務的概念

下一篇:Java代理機制

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久7电影| 成人精品视频久久久久| 日本不卡免费高清视频| 亚洲美腿欧美激情另类| 日韩欧美成人免费视频| 国产成人精品优优av| 欧美日韩国产va另类| 午夜精品福利视频| 美女视频久久黄| 国产成人自拍视频在线观看| 欧美性视频精品| 在线看国产精品| 国内精品视频久久| 欧美寡妇偷汉性猛交| 午夜精品视频网站| 亚洲欧美制服综合另类| 欧美性猛交丰臀xxxxx网站| 91av在线免费观看| 精品久久中文字幕| 亚洲第一精品电影| 日韩欧美有码在线| 中文字幕成人精品久久不卡| 成人免费看黄网站| 欧美最猛性xxxx| 亚洲欧洲成视频免费观看| 亚洲第一网中文字幕| 久久久久久久av| 96国产粉嫩美女| 国产亚洲免费的视频看| 中文字幕亚洲一区二区三区五十路| 欧美在线精品免播放器视频| 欧美在线视频观看免费网站| 亚洲视频在线播放| www日韩欧美| 国产+人+亚洲| 国产亚洲日本欧美韩国| 中文字幕在线看视频国产欧美| 一区三区二区视频| 欧美精品videos| 国产精品xxxxx| 欧美色视频日本高清在线观看| 日韩黄色在线免费观看| 欧美日韩综合视频网址| 国产精品久久一区| 国产美女扒开尿口久久久| 综合136福利视频在线| 欧美国产激情18| 浅井舞香一区二区| 日韩视频免费在线| 国产在线视频不卡| 亚洲天堂视频在线观看| 国产精品久久国产精品99gif| 午夜精品久久久久久久99黑人| 8x拔播拔播x8国产精品| 久久97久久97精品免视看| 亚洲一区二区久久| 北条麻妃一区二区三区中文字幕| 亚洲aaaaaa| 久久久国产91| 欧美巨大黑人极品精男| 91干在线观看| 中文国产成人精品久久一| 欧美激情精品在线| 欧美成人午夜激情在线| 欧美俄罗斯性视频| 中文字幕欧美精品日韩中文字幕| 亚洲欧美国产精品久久久久久久| 久久久噜久噜久久综合| 精品国产乱码久久久久久天美| 2019av中文字幕| 国产一区二区精品丝袜| 欧美在线免费观看| 国产精品三级美女白浆呻吟| 日韩视频亚洲视频| 欧美激情极品视频| 欧美亚州一区二区三区| 国产日韩欧美在线看| 97在线视频国产| 中文字幕综合一区| 日韩高清电影免费观看完整版| 亚洲国产欧美日韩精品| 国产成人精品视频在线| 91综合免费在线| 日韩久久免费视频| 欧美极品美女视频网站在线观看免费| 亚洲一区二区三区777| 久久精品美女视频网站| 国产精品国产三级国产aⅴ9色| 欧美成人精品影院| 午夜免费在线观看精品视频| 成人激情视频免费在线| 国产国语videosex另类| 日韩av中文字幕在线免费观看| 亚洲精品一区二区三区不| 久久国产精品久久久久久久久久| 国产精品爽爽ⅴa在线观看| 黄色一区二区在线| 一区二区在线视频播放| 久久99精品久久久久久噜噜| 国产精品稀缺呦系列在线| 91九色蝌蚪国产| 亚洲第一级黄色片| 国产精品都在这里| 欧美美女18p| 亚洲成人久久久久| 日韩av电影免费观看高清| 中文字幕亚洲欧美一区二区三区| 国产精品电影久久久久电影网| 日韩视频精品在线| 一本色道久久88综合日韩精品| 日韩精品在线视频观看| 欧美国产日韩视频| 国产精品网站视频| 亚洲成色777777在线观看影院| 欧美成人四级hd版| 欧美高跟鞋交xxxxxhd| 最新国产成人av网站网址麻豆| 搡老女人一区二区三区视频tv| 日韩在线免费视频观看| 国产精品久久久av久久久| 国产成人综合精品| 亚洲欧美制服丝袜| 亚洲网站在线看| 欧美精品第一页在线播放| 亚洲xxxx18| 欧美成人免费全部观看天天性色| 日韩av影院在线观看| 这里只有精品在线播放| 日韩在线视频观看正片免费网站| 亚洲精品按摩视频| 成人黄色在线观看| 久热精品视频在线免费观看| 这里只有精品在线播放| 国产成人黄色av| 欧美在线观看视频| 岛国精品视频在线播放| 成人网在线免费看| 国产亚洲视频在线观看| 精品久久久久久久久久久| 亚洲大胆人体av| 久久精品99久久久香蕉| 亚洲国产高清高潮精品美女| 亚洲三级黄色在线观看| 亚洲国产天堂久久国产91| 亚洲的天堂在线中文字幕| 欧美黄色www| 亚洲无线码在线一区观看| 亚洲欧洲午夜一线一品| 亚洲国产日韩欧美在线动漫| 国产一区二区三区18| 日韩av一区二区在线| 亚洲欧美一区二区三区情侣bbw| 亚洲精品一区av在线播放| 国产91网红主播在线观看| 日韩成人中文字幕在线观看| 日韩电影中文 亚洲精品乱码| 日本久久久久久久久久久| 欧美在线观看网站| 夜夜嗨av色综合久久久综合网| 日本精品久久久| 少妇精69xxtheporn| 欧美刺激性大交免费视频| 91精品久久久久久久久不口人| 91av在线播放视频|