<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      java單例模式——詳解JAVA單例模式及8種實現方式

      ## 單例模式是最簡單也是最基礎的設計模式之一,下邊一起學習一下單例模式!

      一.單例模式的定義:
      單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。在計算機系統中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具有資源管理器的功能。每臺計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每臺計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用??傊?,選擇單例模式就是為了避免不一致狀態,避免政出多頭。

      二.單例模式的特點
       1、單例類只能有一個實例。
       2、單例類必須自己創建自己的唯一實例。
       3、單例類必須給所有其他對象提供這一實例。
      單例模式保證了全局對象的唯一性,比如系統啟動讀取配置文件就需要單例保證配置的一致性。

      三.線程安全問題:
      一方面在獲取單例的時候,要保證不能產生多個實例對象,后面會詳細講到五種實現方式;
      另一方面,在使用單例對象的時候,要注意單例對象內的實例變量是會被多線程共享的,推薦使用無狀態的對象,不會因為多個線程的交替調度而破壞自身狀態導致線程安全問題,比如我們常用的VO,DTO等(局部變量是在用戶棧中的,而且用戶棧本身就是線程私有的內存區域,所以不存在線程安全問題)。

      四.實現單例模式的八種方式:
      1.餓漢式(靜態常量)【可用】
      優點:這種寫法比較簡單,就是在類裝載的時候就完成實例化。避免了線程同步問題。
      缺點:在類裝載的時候就完成實例化,沒有達到Lazy Loading的效果。如果從始至終從未使用過這個實例,則會造成內存的浪費。
      在這里插入圖片描述

      2.餓漢式(靜態代碼塊)【可用】
      這種方式和上面的方式其實類似,只不過將類實例化的過程放在了靜態代碼塊中,也是在類裝載的時候,就執行靜態代碼塊中的代碼,初始化類的實例。優缺點和上面是一樣的。
      在這里插入圖片描述

      3.懶漢式(線程不安全)【不可用】
      這種寫法起到了Lazy Loading的效果,但是只能在單線程下使用。如果在多線程下,一個線程進入了if (singleton == null)判斷語句塊,還未來得及往下執行,另一個線程也通過了這個判斷語句,這時便會產生多個實例。所以在多線程環境下不可使用這種方式。
      在這里插入圖片描述

      4.懶漢式(線程安全,同步方法)【不推薦用】
      解決上面第三種實現方式的線程不安全問題,做個線程同步就可以了,于是就對getInstance()方法進行了線程同步。
      缺點:效率太低了,每個線程在想獲得類的實例時候,執行getInstance()方法都要進行同步。而其實這個方法只執行一次實例化代碼就夠了,后面的想獲得該類實例,直接return就行了。方法進行同步效率太低要改進。
      在這里插入圖片描述

      5.懶漢式(線程安全,同步代碼塊)【不可用】
      由于第四種實現方式同步效率太低,所以摒棄同步方法,改為同步產生實例化的的代碼塊。但是這種同步并不能起到線程同步的作用。跟第3種實現方式遇到的情形一致,假如一個線程進入了if (singleton == null)判斷語句塊,還未來得及往下執行,另一個線程也通過了這個判斷語句,這時便會產生多個實例。
      在這里插入圖片描述

      6.雙重檢查【推薦使用】
      Double-Check概念對于多線程開發者來說不會陌生,如代碼中所示,我們進行了兩次if (singleton == null)檢查,這樣就可以保證線程安全了。這樣,實例化代碼只用執行一次,后面再次訪問時,判斷if (singleton == null),直接return實例化對象。
      優點:線程安全;延遲加載;效率較高。
      在這里插入圖片描述

      7.靜態內部類【推薦使用】
      這種方式跟餓漢式方式采用的機制類似,但又有不同。兩者都是采用了類裝載的機制來保證初始化實例時只有一個線程。不同的地方在餓漢式方式是只要Singleton類被裝載就會實例化,沒有Lazy-Loading的作用,而靜態內部類方式在Singleton類被裝載時并不會立即實例化,而是在需要實例化時,調用getInstance方法,才會裝載SingletonInstance類,從而完成Singleton的實例化。
      類的靜態屬性只會在第一次加載類的時候初始化,所以在這里,JVM幫助我們保證了線程的安全性,在類進行初始化時,別的線程是無法進入的。
      優點:避免了線程不安全,延遲加載,效率高。
      在這里插入圖片描述

      8.枚舉【推薦使用】
      借助JDK1.5中添加的枚舉來實現單例模式。不僅能避免多線程同步問題,而且還能防止反序列化重新創建新的對象。
      在這里插入圖片描述

      五.單例模式的優點
      系統內存中該類只存在一個對象,節省了系統資源,對于一些需要頻繁創建銷毀的對象,使用單例模式可以提高系統性能。
      六.單例模式的缺點
      當想實例化一個單例類的時候,必須要記住使用相應的獲取對象的方法,而不是使用new,可能會給其他開發人員造成困擾,特別是看不到源碼的時候。
      七.單例模式的使用場景
      ? 需要頻繁的進行創建和銷毀的對象;
      ? 創建對象時耗時過多或耗費資源過多,但又經常用到的對象;
      ? 工具類對象;
      ? 頻繁訪問數據庫或文件的對象。

       

       

      轉自:https://blog.csdn.net/qq_41458550/article/details/109243456

      posted @ 2022-04-25 18:38  jevan  閱讀(442)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 五月婷婷久久中文字幕| 亚洲综合网国产精品一区| 日韩有码中文字幕国产| 国产熟女精品一区二区三区| av色国产色拍| 天天躁日日躁狠狠躁中文字幕| 亚洲中文字幕在线二页| 免费国产一级 片内射老| 国产一区二区三区导航| 欧美激情精品久久久久久| 72种姿势欧美久久久久大黄蕉| 亚洲av精选一区二区| 波多野结衣视频一区二区| 日韩精品有码中文字幕| 人妻少妇精品无码专区二区| 久久这里精品国产99丫E6| 中文字幕久久熟女蜜桃| 精品国产乱码久久久久app下载| 丰满少妇被猛烈进出69影院| 四虎永久免费高清视频| 国产99青青成人A在线| 成在人线av无码免费| 国产人妇三级视频在线观看| 亚洲免费观看视频| 精品人妻中文字幕av| 中文字幕日韩一区二区不卡| 中文文字幕文字幕亚洲色| 久爱无码精品免费视频在线观看| 天天做天天爱夜夜爽导航 | 久久综合亚洲色一区二区三区| 97人妻成人免费视频| 国产成人精品永久免费视频| 国产亚洲精品AA片在线播放天| 精品国模一区二区三区| 久久精品熟女亚洲av麻| 日韩一区二区三区水蜜桃| 欧美人人妻人人澡人人尤物 | 日韩不卡无码精品一区高清视频 | 四虎永久免费高清视频| 亚洲最大成人av在线天堂网| 蜜臀av午夜精品福利|