精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

手机看片福利日韩| 成人黄动漫网站免费| 在线观看日本中文字幕| 国产经典一区| 一区二区三区在线观看国产| 国产精品一码二码三码在线| 成人a v视频| 亚洲香蕉av| 亚洲国产三级网| 少妇性饥渴无码a区免费| 日韩黄色影院| 国产成人精品午夜视频免费| 国模视频一区二区三区| 日本一级免费视频| 成人看片黄a免费看视频| 91久久一区二区| 国产性生活免费视频| 国产福利片在线| 成人国产精品视频| 国产女人18毛片水18精品| 国产97免费视频| 九色精品国产蝌蚪| 精品成人一区二区| 男人的天堂最新网址| 人在线成免费视频| 亚洲精品乱码久久久久久日本蜜臀| 久久人人爽爽人人爽人人片av| 国产美女裸体无遮挡免费视频| 久久只有精品| 久久理论片午夜琪琪电影网| 永久av免费网站| 国产精品一区二区av日韩在线| 欧美成人r级一区二区三区| 成人午夜激情av| 97成人资源| 亚洲午夜精品17c| 自拍偷拍一区二区三区| 国产精品一区二区婷婷| 91亚洲男人天堂| 国产精品久久九九| 国产人妖在线播放| 国产一区二区三区综合| 国产精品久久久久久久久久久不卡| 日韩熟女精品一区二区三区| 午夜久久影院| 久久91亚洲精品中文字幕奶水| www.xx日本| 国产麻豆精品久久| 亚洲色图综合网| 麻豆av免费观看| 日韩在线黄色| 日韩av在线免播放器| 岛国精品一区二区三区| 高清精品久久| 欧美一级片免费看| 被黑人猛躁10次高潮视频| 成人mm视频在线观看| 欧美三区在线观看| 国产一区二区在线免费播放| 成人性片免费| 欧美精品99久久久**| 欧美一级xxxx| 视频精品一区| 亚洲成在人线av| 波多野结衣视频播放| 牛牛影视久久网| 亚洲精品在线观看www| 久久久久亚洲av无码专区桃色| 九一成人免费视频| 少妇精69xxtheporn| 午夜激情福利电影| 91精品啪在线观看国产18| 久久艳片www.17c.com| 免费在线视频一区二区| 一区二区国产在线观看| 日韩免费精品视频| 中文字幕一区二区三区四区视频| 久久99精品视频| 91免费版黄色| 无码精品一区二区三区在线| 久久久夜色精品亚洲| 亚洲精品高清国产一线久久| 国产1区在线| 欧美日韩国产一区中文午夜| 美女黄色片视频| 激情五月综合婷婷| 亚洲国内高清视频| 大胸美女被爆操| 伊人久久大香线蕉综合四虎小说| 欧美极品在线播放| 国产精品久久久久久久久久精爆| 久久成人久久爱| 国产高清在线精品一区二区三区| 亚洲三区在线播放| 亚洲欧洲制服丝袜| 日韩激情免费视频| av在线精品| 日韩国产精品亚洲а∨天堂免| 男人的天堂av网| 欧美三级在线| 国产精品丝袜视频| 欧日韩在线视频| 国产精品网站在线播放| 人妻少妇精品无码专区二区| 欧美片第1页| 日韩天堂在线观看| 手机看片日韩av| 国产精品99免费看| 国产精品男人爽免费视频1| 亚洲成人av综合| 欧美国产视频在线| 国产素人在线观看| 亚洲日本中文| 亚洲欧美一区二区三区情侣bbw| 久草视频手机在线| 三级欧美韩日大片在线看| 91成人免费视频| 在线观看h片| 欧美性生活大片免费观看网址| 奇米777在线| 欧美午夜精彩| 欧洲美女7788成人免费视频| www男人的天堂| 国产精品电影院| 成人在线看视频| 成人h动漫免费观看网站| 久热在线中文字幕色999舞| 无码人妻av一区二区三区波多野| 国产99一区视频免费| 一区二区三区四区不卡| 波多视频一区| 亚洲精品www久久久| 黄色一级免费视频| 国内精品伊人久久久久影院对白| 五月天国产一区| 在线女人免费视频| 亚洲精品91美女久久久久久久| 久草视频中文在线| 粉嫩欧美一区二区三区高清影视| 在线观看免费91| 日韩一区二区三区免费视频| 亚洲人成在线播放| 国产www在线| 久久综合九色综合久久久精品综合 | 成人网在线播放| 日本免费成人网| 久久久久久爱| 久久成人人人人精品欧| 国产精品热久久| 18成人在线视频| 91香蕉国产线在线观看| 国产精品二区不卡| 91天堂在线观看| 超碰超碰在线| 日韩免费高清av| 精品无码免费视频| 成人h动漫精品一区二区| 欧美国产日韩激情| 日本精品影院| 国产精品久久久久久婷婷天堂| 欧美女v视频| 欧美伊人久久久久久午夜久久久久| 色无极影院亚洲| 日韩av中文字幕一区二区三区 | 亚洲男女av一区二区| 91老司机精品视频| 女同一区二区免费aⅴ| 亚洲电影在线看| 色一情一乱一伦| 国产精品欧美久久久久一区二区| 国产福利精品一区二区三区| 一区二区电影| 国产乱人伦精品一区二区| 超碰一区二区| 中文字幕亚洲综合久久| av在线亚洲天堂| 精品久久久久国产| 日韩不卡av在线| 国产精品综合二区| 阿v天堂2017| 日本高清免费电影一区| 亚洲最大的网站| 爱啪啪综合导航| 国产午夜精品免费一区二区三区 | 国产精品不卡av| 2020国产精品自拍| 日本精品一区在线| 在线播放日韩| 亚洲欧洲一区二区福利| 一区二区精彩视频| 欧美手机在线视频| 一本一本久久a久久| 成人高清视频在线观看| 噼里啪啦国语在线观看免费版高清版| 99久久亚洲精品| 久久99精品国产一区二区三区| 蜜桃成人精品| 欧美高清在线观看| jizz在线观看| 亚洲成人av中文字幕| 在线免费看av片| 精品国产1区2区| 夫妻性生活毛片| 久久蜜桃香蕉精品一区二区三区| 日韩中文字幕免费在线| 国产综合久久| 色播亚洲婷婷| 好吊妞国产欧美日韩免费观看网站| 国产精品久久视频| av最新在线| 久久综合久久八八| aaa在线免费观看| 亚洲国产精品久久91精品| ,一级淫片a看免费| 欧洲中文字幕精品| 国产污污视频在线观看| 一区二区三区毛片| 少妇高潮惨叫久久久久| 久久久久久**毛片大全| 又黄又爽的网站| 黑人巨大精品欧美一区| 爱情岛论坛成人| 久久婷婷影院| 免费毛片小视频| 影音先锋中文字幕一区| 特级黄色录像片| 成人av资源网站| 国产精品视频永久免费播放| 韩国日本一区| 日韩亚洲精品视频| 川上优的av在线一区二区| 亚洲成人av中文字幕| 国产成人三级一区二区在线观看一 | 国产无遮挡在线观看| 99精品欧美一区二区蜜桃免费| 日本在线视频播放| 九九精品视频在线看| 自拍偷拍 国产| 天堂久久久久va久久久久| 国产黄色一级网站| 国产深夜精品| 久色视频在线播放| 一区二区精品| 黄色一级视频在线播放| 亚洲精品1区2区| 美脚丝袜脚交一区二区| 狠狠入ady亚洲精品| 久久国产午夜精品理论片最新版本| 五月天综合网站| 美国av在线播放| 综合激情网站| 日本道在线视频| 你懂的网址国产 欧美| 老汉色影院首页| 欧美破处大片在线视频| www.日本少妇| 免费亚洲一区| jizz欧美激情18| 麻豆freexxxx性91精品| 亚洲第一色av| 高清av一区二区| 中文字幕乱码在线| 久久久久久久久蜜桃| 神马久久久久久久久久久| 中文字幕一区免费在线观看| 国产成人久久久久| 亚洲最大的成人av| 久久久久久久久影院| 日本丰满少妇一区二区三区| 国产又粗又猛又爽又黄91| 欧美久久久久久久久中文字幕| 国产草草影院ccyycom| 亚洲国产成人精品女人久久久| 青青青草原在线| 色噜噜狠狠狠综合曰曰曰| 精品国产丝袜高跟鞋| 欧美大片大片在线播放| 蜜臀久久精品| 国产日韩在线一区| 一区二区三区四区视频免费观看| 久久免费99精品久久久久久| 精品国产91久久久久久浪潮蜜月| 亚洲天堂成人在线观看| 1024手机在线观看你懂的| 18成人在线视频| 日韩熟女精品一区二区三区| 欧美综合一区二区| 亚洲成人精品女人久久久| 亚洲精品丝袜日韩| 成人在线观看免费网站| 91精品成人久久| 免费一级欧美在线观看视频| 高清视频一区二区三区| 神马电影久久| 欧美国产视频一区| 日韩精品三区四区| 色婷婷狠狠18禁久久| 久久精品在这里| 精品99在线观看| 在线观看av不卡| 特黄视频在线观看| 日韩网站在线观看| 一根才成人网| 国产91免费视频| 97欧美在线视频| 人妻有码中文字幕| 国产99精品国产| 日韩一卡二卡在线观看| 岛国视频午夜一区免费在线观看| 国产绿帽刺激高潮对白| 国产亚洲aⅴaaaaaa毛片| 成全电影大全在线观看| 91九色综合久久| 成人直播大秀| 超碰97人人射妻| 成人精品视频一区| 波多野结衣家庭教师| 欧美日韩在线播放| 精品乱码一区二区三四区视频| 欧美激情国产精品| 成人国产精品久久| 亚洲一区二区三区四区中文| 亚洲欧美日本日韩| 白嫩情侣偷拍呻吟刺激| 亚洲人成伊人成综合网小说| 中文字幕观看视频| 亚洲精品自在久久| 国产精品yjizz视频网| 99一区二区| 欧美日本一区| 亚洲成人激情小说| 亚洲精品国久久99热| 91精品国产综合久| 中文字幕亚洲色图| 88xx成人永久免费观看| 鲁丝一区二区三区免费| 国产欧美精品| yy6080午夜| 午夜电影一区二区| 日本精品久久久久久| 久久久久国产视频| 成人直播在线观看| 欧美视频在线观看视频| 丁香激情综合国产| 国产在线拍揄自揄拍无码视频| 日韩免费观看高清完整版在线观看| 麻豆网在线观看| 91香蕉国产在线观看| 亚洲综合色站| 色诱av手机版| 亚洲国产一区二区三区青草影视| www.色呦呦| 国模视频一区二区| 丝袜连裤袜欧美激情日韩| 18岁视频在线观看| 国产目拍亚洲精品99久久精品| 国产乱码在线观看| 日韩小视频网址| 91久久偷偷做嫩草影院电| 日本一级黄视频| 不卡在线视频中文字幕| 黄色一级片免费在线观看| 亚洲图片欧美午夜| 青青久久精品| 欧美一级中文字幕| 99久久综合狠狠综合久久| 黄色一级视频免费看| 中文字幕欧美日韩在线| 精品久久国产一区| 亚洲中文字幕无码av永久| 久久免费电影网| 国产精品久久无码一三区| 欧美激情网友自拍| 久久99国产精一区二区三区| 国产日韩欧美久久| 夜夜嗨av一区二区三区网页| 日本一二三区在线视频| 国产精品视频yy9099| 欧美日韩中文| 自拍偷拍视频亚洲| 日韩一级免费观看| 欧美黑人一区| 9191国产视频| 久久久777精品电影网影网 | 欧美成人a∨高清免费观看| 无码小电影在线观看网站免费| 亚洲精品一区二区毛豆| 成人午夜精品一区二区三区| 天天射天天干天天| 久99九色视频在线观看| 国产亚洲电影| 一卡二卡三卡四卡五卡| 日本二三区不卡| 丁香花电影在线观看完整版| 日韩精品电影网站| 成人一道本在线| 91久久久久国产一区二区| 91黄色8090| 激情偷拍久久| 国产探花视频在线|