精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

小小的單例模式竟然有這么多種寫法?

開發 前端
單例模式應該是設計模式中最容易理解也是用得最多的一種模式了,同時也是面試的時候最常被問到的模式。

[[404953]]

單例模式應該是設計模式中最容易理解也是用得最多的一種模式了,同時也是面試的時候最常被問到的模式。

1. 單例模式的定義

單例模式指的是一個類中在任何情況下都絕對只有一個實例,并且提供一個全局訪問點。

2. 單例模式的應用場景

單例模式的應用非常廣泛,如數據庫中的連接池、J2EE中的ServletContext和ServletContextConfig、Spring框架中的ApplicationContext等等。然而在Java中,單例模式還可以保證一個JVM中只存在一個唯一的實例。

單例模式的應用場景主要有以下幾個方面:

  • 當需要頻繁創建一些類的時候,使用單例可以降低系統的內存壓力,減少GC(垃圾回收) ;
  • 當某些類創建實例時候需要占用的資源較多,或者實例化過程耗時比較長,且經常使用的情況;
  • 當存在頻繁訪問數據庫或者文件的對象;
  • 當對于一些控制硬件級別的操作,或者從系統上來講應當是單一控制邏輯的操作,是不允許存在多個實例的,否則玩完;

3. 單例模式的優缺點

3.1 單例模式的優點

  • 單例模式可以保證內存中只有一個實例對象,從而會減少內存的開銷;
  • 單例模式可以避免對資源的多重占用;
  • 單例模式設置全局訪問點,可以起到優化和共享資源的訪問的作用;

3.2 單例模式的缺點

  • 擴展難, 因為單例模式通常是沒有接口的啊,如果想要擴展,那么你唯一途徑就是修改之前的代碼,所以說單例模式違背了開閉原則;
  • 調試難,因為在并發測試中,單例模式是不利于代碼的調試的,單例中的代碼沒有執行完,也不能模擬生成一個新對象;
  • 違背單一職責原則,因為單例模式的業務代碼通常寫在一個類中,如果功能設計不合理,就很容易違背單一職責原則;

4. 單例模式的實現方式及其優缺點

4.1 單例模式的餓漢式實現

4.1.1 餓漢式標準寫法

Singleton類稱為單例類,通過內部初始化一次 , 隱藏構造方法, 并提供一個全局訪問點的方式實現。

  1. /** 
  2.  * msJava 
  3.  * 
  4.  * @Description 單例模式的通用寫法 
  5.  * @Date 2021-01-23 
  6.  */ 
  7. public class Singleton { 
  8.     /** 
  9.      * 內部初始化一次 
  10.      */ 
  11.     private static final Singleton instance = new Singleton(); 
  12.  
  13.     /** 
  14.      * 隱藏構造方法 
  15.      */ 
  16.     private Singleton() { 
  17.     } 
  18.  
  19.     /** 
  20.      * 提供一個全局訪問點 
  21.      * 
  22.      * @return Singleton 
  23.      */ 
  24.     public static Singleton getInstance() { 
  25.         return instance; 
  26.     } 
  27.  

以上餓漢式單例寫法在類的初始化的時候就會進行初始化操作,并且創建對象,絕對的線程安全,因為此時線程還沒有出現就已經實例化了,故不會存在訪問安全的問題。

4.1.2 餓漢式靜態塊機制寫法

餓漢式還有一種實現,那就是靜態塊機制,如下代碼所示:

  1. /** 
  2.  * msJava 
  3.  * 
  4.  * @Description 單例模式  餓漢式靜態機制 實現 
  5.  * @Date 2021-01-23 
  6.  */ 
  7. public class HungryStaticSingleton { 
  8.      
  9.     private static final HungryStaticSingleton hungrySingleton; 
  10.     //靜態代碼塊 類加載的時候就初始化 
  11.     static { 
  12.         hungrySingleton=new HungryStaticSingleton(); 
  13.     } 
  14.     /** 
  15.      * 私有化構造函數 
  16.      */ 
  17.     private HungryStaticSingleton(){} 
  18.  
  19.     /** 
  20.      * 提供一個全局訪問點 
  21.      * @return 
  22.      */ 
  23.     public static HungryStaticSingleton getInstance() { 
  24.         return hungrySingleton; 
  25.     } 

我們分析一下這種是寫法 ,可以明顯的看到所以對象是類在加載的時候就進行實例化了,那么這樣一來,會導致單例對象的數量不確定,從而會導致系統初始化的時候就造成大量內存浪費,況且你用不用還不一定,還一直占著空間,俗稱“占著茅坑不拉屎”。

4.2 單例模式的懶漢式實現

為了解決餓漢式單例寫法可能帶來的內存浪費問題,這里分析一下懶漢式單例的寫法。如下代碼所示:

  1. /** 
  2.  * msJava 
  3.  * 
  4.  * @Description 單例模式  懶漢式單例實現 
  5.  * @Date 2021-01-23 
  6.  */ 
  7. public class LazySimpleSingleton { 
  8.  
  9.     private static LazySimpleSingleton lazySingleton = null
  10.  
  11.     /** 
  12.      * 私有化構造函數 
  13.      */ 
  14.     private LazySimpleSingleton() { 
  15.  
  16.     } 
  17.     /** 
  18.      * 提供一個全局訪問點 
  19.      * 
  20.      * @return 
  21.      */ 
  22.     public static LazySimpleSingleton getInstance() { 
  23.         if (lazySingleton == null) { 
  24.             lazySingleton = new LazySimpleSingleton(); 
  25.         } 
  26.         return lazySingleton; 
  27.     } 

這樣實現的好處就是只有對象被使用的時候才會進行初始化,不會存在內存浪費的問題,但是它會在多線程環境下,存在線程安全問題。我們可以利用synchronized關鍵字將全局訪問點方法變成一個同步方法,這樣就可以解決線程安全的問題,代碼如下所示:

  1. /** 
  2.  * msJava 
  3.  * 
  4.  * @Description 單例模式  懶漢式單例實現 synchronized修飾  
  5.  * @Date 2021-01-23 
  6.  */ 
  7. public class LazySimpleSingleton { 
  8.     private static LazySimpleSingleton lazySingleton = null
  9.     /** 
  10.      * 私有化構造函數 
  11.      */ 
  12.     private LazySimpleSingleton() {} 
  13.     /** 
  14.      * 提供一個全局訪問點   
  15.      * 
  16.      * @return 
  17.      */ 
  18.     public synchronized static  LazySimpleSingleton getInstance() { 
  19.         if (lazySingleton == null) { 
  20.             lazySingleton = new LazySimpleSingleton(); 
  21.         } 
  22.         return lazySingleton; 
  23.     } 

但是,這樣雖然解決了線程安全的問題,可是如果在線程數量劇增的情況下,用synchronized加鎖,則會導致大批線程阻塞,從而驟減系統性能。

4.3 單例模式的雙重檢測實現

在上述代碼上進一步優化,代碼如下所示:

  1. /** 
  2.  * msJava 
  3.  * 
  4.  * @Description 單例模式  懶漢式-雙重檢測單例實現 
  5.  * @Date 2021-01-23 
  6.  */ 
  7. public class LazyDoubleCheckSingleton { 
  8.     // volatile 關鍵字修飾 
  9.     private volatile static LazyDoubleCheckSingleton lazySingleton ; 
  10.     /** 
  11.      * 私有化構造函數 
  12.      */ 
  13.     private LazyDoubleCheckSingleton() {} 
  14.     /** 
  15.      * 提供一個全局訪問點 
  16.      * 
  17.      * @return 
  18.      */ 
  19.     public static LazyDoubleCheckSingleton getInstance() { 
  20.         // 這里先判斷一下是否阻塞 
  21.         if (lazySingleton == null) { 
  22.             synchronized (LazyDoubleCheckSingleton.class){ 
  23.                 // 判斷是否需要重新創建實例 
  24.                 if (lazySingleton == null) { 
  25.                     lazySingleton = new LazyDoubleCheckSingleton(); 
  26.                 } 
  27.             } 
  28.         } 
  29.         return lazySingleton; 
  30.     } 

()方法時,第二個線程也可以調用,但是第一個線程執行synchronized時候,第二個線程就會發現阻塞,但是此時的阻塞是getInstance()內部的阻塞。

4.4 單例模式的靜態內部類實現

雖然雙重檢測鎖的單例模式解決了線程安全和性能問題,但是畢竟涉及加鎖的操作,多多少少就會到了性能的影響,下面我們分享一下更加優雅的單例模式實現,如下代碼所示:

  1. /** 
  2.  * msJava 
  3.  * 
  4.  * @Description 單例模式  靜態內部類單例實現 
  5.  * @Date 2021-01-23 
  6.  */ 
  7. public class LazyStaticInnerClassSingleton { 
  8.     //  在構造方法里面拋出異常真的合適? 
  9.   private LazyStaticInnerClassSingleton(){ 
  10.     if(LazyHolder.INSTANCE != null){ 
  11.         throw new RuntimeException("不允許創建多個實例"); 
  12.     } 
  13.   } 
  14.   // static 保證這個方法不會被重寫 覆蓋 
  15.   private static LazyStaticInnerClassSingleton getInstance(){ 
  16.       return LazyHolder.INSTANCE; 
  17.   } 
  18.   // Java 默認不會加載內部類 
  19.   private static class LazyHolder{ 
  20.       private static final LazyStaticInnerClassSingleton INSTANCE=new LazyStaticInnerClassSingleton(); 
  21.   } 

5. 總結

 

單例模式面試幾乎必備!

 

責任編輯:武曉燕 來源: 碼上Java
相關推薦

2021-02-03 20:19:08

Istio流量網格

2020-11-02 08:35:59

內存數據庫Redis

2016-09-01 13:54:23

Google太空電梯懸滑板

2013-01-24 09:44:44

數據庫

2020-06-01 08:04:18

三目運算符代碼

2024-05-13 16:22:25

固態硬盤接口硬盤

2022-03-03 07:00:43

Mybatiswhere標簽

2015-05-18 15:08:08

多種程序設計語言程序設計語言

2024-04-02 08:41:10

ArrayListSubList場景

2017-06-16 16:16:36

庫存扣減查詢

2018-06-26 15:00:24

Docker安全風險

2022-08-10 11:02:56

Python單例模式

2019-12-09 10:13:20

HashMap選擇容量

2022-05-23 07:35:15

單例模式懶漢模式靜態內部類

2017-03-07 17:45:42

Windows磁盤碎片整理

2023-07-26 00:32:33

注解抽象spring

2013-01-15 09:41:45

編程語言

2017-12-21 19:38:50

潤乾中間表

2021-01-14 05:08:44

編譯鏈接

2022-07-26 23:43:29

編程語言開發Java
點贊
收藏

51CTO技術棧公眾號

久久久久久一区二区| 亚洲毛片在线免费| 久久亚洲捆绑美女| 国产精品久久久久久久久久尿 | 亚洲精品自在久久| 少妇网站在线观看| av老司机免费在线| 久久婷婷综合激情| 91久色国产| 日韩黄色片网站| 99热精品久久| 亚洲男子天堂网| 久久精品一二三四| av免费观看网| 久久免费看视频| 国产一区91精品张津瑜| 欧美在线激情网| www.色小姐com| 国产一区二区三区四区五区传媒| 91精品国产综合久久精品性色 | 日韩在线一二三区| 欧美激情一二三| 色www亚洲国产阿娇yao| 国产精品17p| 欧美美女黄视频| 99草草国产熟女视频在线| 丁香花在线高清完整版视频| 国产精品电影一区二区| 久久亚洲免费| 三级小视频在线观看| 毛片av中文字幕一区二区| 久久99国产综合精品女同| 亚洲天堂最新地址| 欧美禁忌电影网| 国产婷婷成人久久av免费高清| xxxx国产视频| 久久精品九色| 91精品国产综合久久久久久| 久久婷婷综合色| 桃色一区二区| 色综合网色综合| 欧美日韩亚洲一| av电影免费在线看| 亚洲欧洲日产国码二区| 色女人综合av| 国产高清免费在线播放| 久久理论电影网| 狼狼综合久久久久综合网| 色屁屁草草影院ccyycom| 老司机免费视频一区二区三区| 日韩免费不卡av| 国产精品免费精品一区| 亚洲男女自偷自拍| 69视频在线免费观看| 欧美午夜aaaaaa免费视频| 无码人妻精品一区二区50| 亚洲最新色图| 久久人人爽人人爽爽久久 | 最新国产精品视频| 亚洲另类欧美自拍| 91视频免费观看网站| 精品一区在线| 一区二区三区久久精品| 人人人妻人人澡人人爽欧美一区| 精品久久久久中文字幕小说| 亚洲一级免费视频| 欧美a在线播放| 97在线精品| 欧美高清一级大片| 久久精品国产亚洲av高清色欲| 亚洲小说欧美另类社区| 97免费中文视频在线观看| 久久久久99精品成人片三人毛片| 久久久久久久尹人综合网亚洲| 国产精品爱啪在线线免费观看| 凹凸精品一区二区三区| 久久国产精品72免费观看| 亚洲一区二区三区视频播放| 亚洲成人777777| 91免费看片在线观看| 欧美人与物videos另类| 1024视频在线| 亚洲午夜三级在线| 日韩视频第二页| 日韩欧乱色一区二区三区在线| 欧美一区二区三区免费视频| 美女扒开腿免费视频| 偷拍视屏一区| 久久精品电影网| 日韩精品一区二区三区国语自制 | 日本超碰在线观看| 午夜视频一区二区在线观看| 亚洲精品国精品久久99热| 老熟妇一区二区| 欧美.日韩.国产.一区.二区| 久久免费在线观看| 国产一级片一区二区| 国产成人自拍网| 天天综合天天做天天综合| 欧美精品免费观看二区| 黄色网址在线免费播放| 黄色成人在线播放| 国产精品久久久久久久av福利| 懂色av一区二区| 亚洲香蕉伊综合在人在线视看| 爱爱视频免费在线观看| 国产农村妇女精品一二区| 成人国产在线视频| 欧洲亚洲在线| 亚洲一二三四区| 久久婷婷综合色| 中文字幕伦av一区二区邻居| 草民午夜欧美限制a级福利片| 91视频免费网址| 国产一区二区视频在线播放| 免费av在线一区二区| 人人澡人人添人人爽一区二区| 色噜噜狠狠成人中文综合| 日本黄色大片在线观看| 手机亚洲手机国产手机日韩| 欧美一区二区三区精品电影| www.xxxx国产| 国产精品成人免费精品自在线观看| 无码中文字幕色专区| 国产成人免费视频网站视频社区| 亚洲人成网站免费播放| 日本三级网站在线观看| 国产福利一区在线| 丰满女人性猛交| 成人av色网站| 亚洲一品av免费观看| 青青草免费观看视频| 国产成都精品91一区二区三| 天天爱天天做天天操| 狂野欧美性猛交xxxx| 亚洲毛片在线看| 黄色一级片免费在线观看| 不卡视频在线观看| 国产美女永久无遮挡| 99久热在线精品视频观看| 中文字幕精品久久久久| 精品成人无码久久久久久| 91丨九色丨尤物| 欧美精品自拍视频| 国产精品45p| 欧美精品久久久久| 午夜av免费看| 欧美hdxxx| 欧美日韩精品一二三区| 国产99在线 | 亚洲| 日韩高清中文字幕一区| 日韩欧美一区二区三区四区 | 欧美另类自拍| 色综合久久中文字幕| 久久久视频6r| 日本va欧美va精品| 一区二区三区四区不卡| а天堂中文最新一区二区三区| xxxxxxxxx欧美| 国产毛片毛片毛片毛片毛片| 亚洲欧美综合色| 日本中文字幕在线不卡| 中文在线播放一区二区| av一区观看| a在线视频v视频| 亚洲男人天天操| 亚洲影视一区二区| 亚洲精品国久久99热| 国产在线观看免费播放| 亚洲人成久久| 欧美日韩一区综合| 国产成+人+综合+亚洲欧美| 日韩在线视频观看| 精品人妻无码一区二区三区蜜桃一| 一区二区三区在线视频免费观看| 中国免费黄色片| 日日夜夜精品视频天天综合网| 亚洲不卡一卡2卡三卡4卡5卡精品| 成人激情综合| 日韩午夜在线视频| 日本加勒比一区| 一本一道久久a久久精品| 蜜桃av免费观看| 成人深夜在线观看| 91av在线免费播放| 91超碰成人| 精品久久久久亚洲| 久久人人视频| 97精品欧美一区二区三区| 国产免费永久在线观看| 欧美一区欧美二区| 在线观看 亚洲| 亚洲乱码国产乱码精品精98午夜 | 9久久9毛片又大又硬又粗| 国产精品久久久久久av公交车| 久久久久亚洲精品| 91xxx在线观看| 亚洲电影免费观看高清完整版在线观看 | 亚洲一区二区综合| 一级肉体全黄裸片| 国产一区三区三区| 熟女人妇 成熟妇女系列视频| 欧美精品不卡| 神马影院午夜我不卡| www.爱久久| 国产日本欧美一区| 亚洲精品福利电影| 欧美国产在线电影| 在线观看a视频| 亚洲另类xxxx| 秋霞网一区二区| 4438亚洲最大| 波多野结衣电车| 亚洲mv大片欧洲mv大片精品| av片在线免费看| 久久久国产精华| 国产伦精品一区二区三区精品| 久久国产生活片100| 99999精品视频| 激情综合网址| 青青草原网站在线观看| 欧美日韩中文一区二区| 精品国产91亚洲一区二区三区www| 99国内精品久久久久| 国产不卡一区二区在线播放| 91在线三级| 久久91超碰青草是什么| 欧美日韩在线资源| 中文字幕亚洲一区在线观看| 日韩二区三区| 日韩精品www| 婷婷五月综合激情| 欧美成人午夜电影| 国产av无码专区亚洲av麻豆| 欧美久久久久中文字幕| 在线免费观看中文字幕| 欧洲av在线精品| 国产精品一区二区三区四| 午夜电影一区二区| 色网站在线播放| 亚洲成av人片一区二区梦乃 | 激情欧美丁香| a天堂资源在线观看| 色wwwwww| 午夜精品国产更新| 亚洲欧美在线观看视频| 亚洲国产精品精华液网站| 久久久.www| 亚洲影院免费观看| 日本熟妇毛耸耸xxxxxx| 亚洲午夜日本在线观看| 日韩av男人天堂| 欧美日韩亚洲91| 6080午夜伦理| 欧美在线短视频| 在线观看一二三区| 91精品久久久久久久91蜜桃 | 欧美自拍电影| 国产精品第一页在线| 激情亚洲小说| 亚洲自拍偷拍第一页| 久久久精品区| 国产欧美欧洲| 九一亚洲精品| 一本色道久久综合亚洲精品婷婷| 国产精品福利在线观看播放| 日本一区二区三区四区五区六区| 欧美视频网站| 女人天堂av手机在线| 丝袜脚交一区二区| 国产乱女淫av麻豆国产| 国产成人综合精品三级| 日本japanese极品少妇| 日本一区二区免费在线| 多男操一女视频| 亚洲午夜电影在线观看| 日韩欧美成人一区二区三区 | 国产香蕉在线观看| 亚洲石原莉奈一区二区在线观看| 国产高清视频在线| 欧美激情精品久久久久久蜜臀| 日本不良网站在线观看| 国产精品日韩在线播放| 午夜电影一区| 日本在线视频不卡| 亚洲网址在线| 三级a在线观看| 国产风韵犹存在线视精品| 成人网站免费观看| 亚洲人成小说网站色在线 | 精品伦精品一区二区三区视频| 国产一区二区电影在线观看| 特色特色大片在线| 天堂成人国产精品一区| 天天综合网日韩| 91蜜桃视频在线| 在线看的片片片免费| 欧美午夜www高清视频| 国产精品玖玖玖| 国产婷婷97碰碰久久人人蜜臀| 50度灰在线| 国产精品久久久久久久久久久久| a看欧美黄色女同性恋| 亚洲欧洲三级| 男人天堂欧美日韩| 亚洲综合中文网| 国产精品午夜电影| 亚洲欧美精品一区二区三区| 视频精品国内| 精品久久久久久中文字幕动漫 | 成人香蕉社区| 中文精品视频一区二区在线观看| 国产日本精品| 无码人妻一区二区三区一| 日本一区二区三区在线不卡| 国产三级av片| 精品久久久久久最新网址| 麻豆影视国产在线观看| 国产精品99久久久久久www| 激情小说亚洲图片| youjizz.com在线观看| 精品影视av免费| 极品人妻videosss人妻| 欧美小视频在线| 空姐吹箫视频大全| 九九热这里只有精品6| 国产成人亚洲一区二区三区| 日韩精品欧美专区| 噜噜噜在线观看免费视频日韩 | 黄色一级大片在线观看| 不卡一区在线观看| 久久精品久久精品久久| 欧美一区二区三区电影| 国产淫片在线观看| 国产精品爽黄69天堂a| 经典一区二区| 国产精品动漫网站| 91丨porny丨户外露出| xxxxxx国产| 亚洲第一二三四五区| 福利在线导航136| 国产一区二区无遮挡| 日韩视频在线一区二区三区| 国产乱淫av片| 亚洲一区二区三区美女| 二区三区在线视频| 国内外成人免费激情在线视频网站| 99久久香蕉| 国产妇女馒头高清泬20p多| 成人免费视频免费观看| 日韩三级视频在线| 日韩精品视频中文在线观看| 蜜桃麻豆av在线| 欧美三级电影在线播放| 日韩成人免费看| 我要看一级黄色录像| 欧美精品一卡两卡| 色a资源在线| 国产精品一区二区三区不卡| 国产亚洲精品自拍| 欧美成人国产精品一区二区| 欧美三级三级三级| 欧美三级黄网| 国产福利久久精品| 性色av一区二区怡红| 黄色av免费播放| 91精品国模一区二区三区| 午夜成年人在线免费视频| 国产精品一区二区在线观看| 国产精品毛片一区二区三区| 欧美大波大乳巨大乳| 欧美一区二区三区四区五区| 黄网av在线| 日韩hmxxxx| 国产一区亚洲一区| 久久国产黄色片| 中文字幕亚洲欧美日韩2019| 国产亚洲亚洲国产一二区| 亚洲人精品午夜射精日韩| 国产日韩欧美精品电影三级在线| 91丨九色丨蝌蚪丨对白| 国模吧一区二区| 黄色不卡一区| 日本黄色大片在线观看| 日本高清无吗v一区| 成人午夜在线影视| 蜜桃麻豆91| 国产福利视频一区二区三区| 在线观看日本视频| 美女精品久久久| 最近国产精品视频| 免费人成视频在线播放| 色综合av在线| 深夜国产在线播放| 日韩欧美电影一区二区| 国产iv一区二区三区| japanese国产在线观看| 久久久伊人欧美| 97视频热人人精品免费| 野花社区视频在线观看|