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

首頁 > 開發 > Java > 正文

詳解java中的6種單例寫法及優缺點

2024-07-14 08:42:59
字體:
來源:轉載
供稿:網友

在java中,單例有很多種寫法,面試時,手寫代碼環節,除了寫算法題,有時候也會讓手寫單例模式,這里記錄一下單例的幾種寫法和優缺點。

1.初級寫法
2.加鎖
3.餓漢式
4.懶漢式
5.雙鎖檢驗
6.內部類

1.初級寫法

package com.java4all.test6;/** * Author: yunqing * Date: 2018/8/13 * Description:單例模式 -- 初級 */public class Singleton {  private static Singleton singleton = null;  public Singleton() {  }  /**并發下會產生多個實例*/  public static Singleton getInstance(){    if(singleton == null){      singleton = new Singleton();    }    return singleton;  }}

上面這種寫法,在并發環境下,會出現多個實例。

2.加鎖

我們優化上面的代碼,遇到并發,很容易想到加鎖,把獲取對象的方法加上關鍵字synchronized,很巧,這種寫法也稱為懶漢式單例 ,如下:

package com.java4all.test6;/** * Author: yunqing * Date: 2018/8/13 * Description: */public class BadSynchronizedSingleton {  private static BadSynchronizedSingleton synchronizedSingleton;  private BadSynchronizedSingleton() {  }  /**   * 缺點:等待時間長   * 這種整個方法都同步了,效率很低   * */  public synchronized static BadSynchronizedSingleton getInstance(){    if(synchronizedSingleton == null){      synchronizedSingleton = new BadSynchronizedSingleton();    }    return synchronizedSingleton;  }}

但是,顯然,我們把整個方法都同步了,效率很低下,我們可以繼續優化,只在創建實例的地方加上同步,參考5雙鎖檢驗。

3.餓漢式

餓漢式的特點是:類在加載時就直接初始化了實例。即使沒用到,也會實例化。

package com.java4all.test6;/** * Author: yunqing * Date: 2018/8/13 * Description:餓漢式單例模式--類初始化時就自行實例化 */public class ESingleton {  /**類在加載的時候直接進行初始化*/  private static final ESingleton ESINGLETON = new ESingleton();  private ESingleton() {}  /**對外暴露唯一接口 提供單例對象*/  public static ESingleton geteSingleton(){    return ESINGLETON;  }}

4.懶漢式

懶漢式的特點是:用到這個實例時才去調用方法實例化。這個和2中的看起來是一樣的,因為這個實例化方法加了synchronized ,這樣安全一些。

package com.java4all.test6;/** * Author: yunqing * Date: 2018/8/13 * Description:懶漢式單例模式 * 第一次調用時實例化 */public class BSingleton {  private static BSingleton bSingleton ;  private BSingleton() {  }  /**   * 整個方法鎖住了,效率較低   * @return   */  public synchronized static BSingleton getbSingleton(){    if(bSingleton == null){      bSingleton = new BSingleton();    }    return bSingleton;  }}

5.雙鎖檢驗

雙重非空判斷,new對象前加一次鎖。

volatile關鍵字,考慮的是,new關鍵字在虛擬機中執行時其實分為很多步驟,具體原因可以參考深入理解java虛擬機一書(考慮的是這個new關鍵字字節碼執行時是非原子性的),而volatile關鍵字可以防止指令重排。

package com.java4all.test6;/** * Author: yunqing * Date: 2018/8/13 * Description:雙鎖檢驗 */public class SynchronizedSingleton {  /**volatile防止指令重排*/  private static volatile SynchronizedSingleton singleton;  private SynchronizedSingleton() {  }  /**只是在實例為空時才進行同步創建   * 為什么做了2次判斷?   * A線程和B線程同時進入同步方法0   * 然后都在1位置處判斷了實例為null   * 然后都進入了同步塊2中   * 然后A線程優先進入了同步代碼塊2中(B線程也進入了),然后創建了實例   * 此時,如果沒有3處的判斷,那么A線程創建實例同時,B線程也會創建一個實例   * 所以,還需要做2次判斷   * */  public static SynchronizedSingleton getInstance(){//0    if(singleton == null){//1      synchronized (SynchronizedSingleton.class){//2        if(singleton == null){//3          singleton = new SynchronizedSingleton();//4        }      }    }    return singleton;  }}

6.內部類

package com.java4all.test6;/** * Author: yunqing * Date: 2018/9/15 * Description:靜態內部類 * 優點:1.延遲,外部類初始化時不會進行實例創建,要用時才會創建 *   2.安全,靜態成員變量 */public class FSingleton {  private FSingleton() {  }  public static FSingleton getInstance(){    return Singleton.fSingleton;  }  private static class Singleton{    private static FSingleton fSingleton = new FSingleton();  }}

總結

以上所述是小編給大家介紹的java中的6種單例寫法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产主播欧美精品| 国产精品91在线| 亚洲国产成人av在线| 国产精品日韩在线播放| 91色在线视频| 国产成人精品日本亚洲| 欧洲s码亚洲m码精品一区| 成人免费网站在线观看| 日韩在线视频线视频免费网站| 欧美国产日本高清在线| 中文字幕视频一区二区在线有码| 欧美区在线播放| 国产美女直播视频一区| 色综合久久中文字幕综合网小说| 九九久久久久久久久激情| 国产99在线|中文| 97超级碰碰人国产在线观看| 国产视频精品自拍| 亚洲欧美另类国产| 日韩日本欧美亚洲| 日韩午夜在线视频| 色婷婷久久一区二区| 国内精品久久久久影院 日本资源| 91精品国产色综合| 日韩精品免费综合视频在线播放| 久久久久五月天| 国产精品1区2区在线观看| 欧美在线欧美在线| 国产精品成人一区二区三区吃奶| 国内精品小视频在线观看| 影音先锋欧美精品| 日韩激情av在线免费观看| 日韩第一页在线| 欧美成人sm免费视频| 中文字幕自拍vr一区二区三区| 国产999精品久久久影片官网| 色婷婷综合久久久久中文字幕1| 国产在线视频91| 色先锋久久影院av| 91在线看www| 亚洲一区二区三区成人在线视频精品| 国产精品www网站| 国产精品激情av在线播放| 午夜精品久久久久久久白皮肤| 91极品女神在线| 日韩在线精品视频| 97视频在线观看成人| 精品国产一区二区三区久久久| 精品一区二区亚洲| 国产剧情日韩欧美| 国产午夜精品美女视频明星a级| 国产视频精品免费播放| 国产亚洲精品91在线| 91国语精品自产拍在线观看性色| 国产精品最新在线观看| 色偷偷88888欧美精品久久久| 欧美午夜www高清视频| 欧洲亚洲免费在线| 亚洲第一视频在线观看| 国产精品成人观看视频国产奇米| 精品国产精品三级精品av网址| 在线亚洲国产精品网| 国产成人在线视频| 人妖精品videosex性欧美| 亚洲欧洲一区二区三区在线观看| 在线观看91久久久久久| 亚洲第一中文字幕| 国产精品偷伦视频免费观看国产| 欧美日韩在线一区| 日韩精品免费在线视频| 日韩av网站导航| 国产一区二区美女视频| 日韩理论片久久| 中文字幕亚洲在线| 亚洲97在线观看| 一区二区三欧美| 欧美性猛交xxxx乱大交极品| 都市激情亚洲色图| 国产精品稀缺呦系列在线| 欧美富婆性猛交| 亚洲激情视频在线播放| 这里只有精品视频在线| 欧美国产一区二区三区| 91免费人成网站在线观看18| 正在播放国产一区| 成年人精品视频| 日韩欧美亚洲成人| 在线日韩av观看| 亚洲成人久久电影| 国产亚洲欧洲黄色| 亚洲自拍偷拍色图| 亚洲美女视频网站| 全球成人中文在线| 久久精品视频免费播放| 欧美激情国产日韩精品一区18| 日韩成人小视频| 中文字幕亚洲无线码在线一区| 中文字幕亚洲综合| 亚洲高清久久久久久| 国产精品偷伦一区二区| 日韩国产中文字幕| 国产成人精品日本亚洲专区61| 最近2019年中文视频免费在线观看| 亚洲精品99久久久久中文字幕| 欧美激情第99页| 色悠悠久久久久| 91亚洲精品一区二区| 国产精品久久久久久亚洲影视| 久久精品99无色码中文字幕| 成人在线免费观看视视频| 欧美xxxwww| 疯狂欧美牲乱大交777| 国产欧美日韩精品在线观看| 亚洲毛片在线免费观看| 欧美综合一区第一页| 免费av在线一区| 亚洲跨种族黑人xxx| 中文字幕视频一区二区在线有码| 麻豆一区二区在线观看| 亚洲视频axxx| 亚洲人成亚洲人成在线观看| 亚洲男女性事视频| 国产精品极品美女在线观看免费| 欧美xxxx18性欧美| 国产精品成人品| 在线观看免费高清视频97| 92国产精品久久久久首页| 亚洲最新av在线网站| 亚洲精品自产拍| 中文字幕国内精品| 成人久久久久爱| 亚洲成av人片在线观看香蕉| 国产精品美女在线观看| 国产欧美精品久久久| 国产精品伦子伦免费视频| 最新日韩中文字幕| 97色在线视频观看| 91精品国产91久久久久| 国产精品电影久久久久电影网| 国产精品高清在线观看| 在线日韩中文字幕| 国产精品一区专区欧美日韩| 97人人爽人人喊人人模波多| 欧美精品videos性欧美| 国自在线精品视频| 欧美一级电影久久| 日韩欧美成人精品| 波霸ol色综合久久| 成人免费自拍视频| 国产精品入口免费视频一| 韩日欧美一区二区| 久久综合免费视频| 精品久久中文字幕久久av| 日韩有码在线观看| 亚洲精品资源在线| 国产一区二中文字幕在线看| 国产精品久久久久久av福利软件| 伊人久久久久久久久久| 欧美一级电影久久| 国产成人97精品免费看片| 成人激情视频免费在线| 4p变态网欧美系列| 亚洲欧美在线一区二区| 国产成人精品亚洲精品|