最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

5分鐘搞定java單例模式

 更新時間:2022年04月07日 10:01:50   作者:大連千鋒  
單例模式(Singleton?Pattern)是?Java?中最簡單的設計模式之一。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式,本文給大家介紹下java單例模式的相關知識,感興趣的朋友一起看看吧

單例模式

單例模式(Singleton),也叫單子模式,是一種常用的軟件設計模式。在應用這個模式時,單例對象的類必須保證只有一個實例存在。許多時候整個系統只需要擁有一個的全局對象,這樣有利于我們協調系統整體的行為。

比如在某個服務器程序中,該服務器的配置信息存放在一個文件中,這些配置數據由一個單例對象統一讀取,然后服務進程中的其他對象再通過這個單例對象獲取這些配置信息。這種方式簡化了在復雜環(huán)境下的配置管理。

單例模式的運用場景

外部資源:每臺計算機有若干個打印機,但只能有一個PrinterSpooler,以避免兩個打印作業(yè)同時輸出到打印機。

Windows的Task Manager(任務管理器)就是很典型的單例模式(這個很熟悉吧),想想看,是不是呢,你能打開兩個windows task manager嗎?

多線程的線程池的設計一般也是采用單例模式,這是由于線程池要方便對池中的線程進行控制。

實現單例模式的方法思路

一個類能返回對象一個引用(永遠是同一個)和一個獲得該實例的方法(必須是靜態(tài)方法,通常使用getInstance這個名稱);

當我們調用這個方法時,如果類持有的引用不為空就返回這個引用,如果類保持的引用為空就創(chuàng)建該類的實例并將實例的引用賦予該類保持的引用。

同時我們 還將該類的構造函數定義為私有方法,這樣其他處的代碼就無法通過調用該類的構造函數來實例化該類的對象,只有通過該類提供的靜態(tài)方法來得到該類的唯一實例。

實現單例模式的方式

01懶漢單例式

天生線程不安全:這種方式是最基本的實現方式,這種實現最大的問題就是不支持多線程。因為沒有加鎖 synchronized,所以嚴格意義上它并不算單例模式。

天生線程不安全:這種方式具備很好的 lazy loading,能夠在多線程中很好的工作,但是,效率很低,99% 情況下不需要同步。

02餓漢單列式

這種方式比較常用,但容易產生垃圾對象。

03靜態(tài)內部類的方式

這種方式能達到雙檢鎖方式一樣的功效,但實現更簡單。對靜態(tài)域使用延遲初始化,應使用這種方式而不是雙檢鎖方式。這種方式只適用于靜態(tài)域的情況,雙檢鎖方式可在實例域需要延遲初始化時使用。

04枚舉

這種實現方式還沒有被廣泛采用,但這是實現單例模式的最佳方法。它更簡潔,自動支持序列化機制,絕對防止多次實例化。

資源加載和性能區(qū)別

餓漢式在類創(chuàng)建的同時就實例化一個靜態(tài)對象出來,不管之后會不會使用這個單例,都會占據一定的內存,但是相應的,在第一次調用時速度也會更快,因為其資源已經初始化完成。

而懶漢式,會延遲加載,在第一次使用該單例的時候才會實例化對象出來,第一次調用時要做初始化,如果要做的工作比較多,性能上會有些延遲,之后就和餓漢式一樣了。

靜態(tài)內部類的方式資源利用率高,但第一次加載時反應不夠快;java中餓單例模式性能優(yōu)于懶單例模式,若對資源十分在意可以采用靜態(tài)內部類。

到此這篇關于5分鐘搞定java單例模式的文章就介紹到這了,更多相關Java 單例模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 老生常談foreach(增強for循環(huán))和for的區(qū)別

    老生常談foreach(增強for循環(huán))和for的區(qū)別

    下面小編就為大家?guī)硪黄仙U刦oreach(增強for循環(huán))和for的區(qū)別。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Spring循環(huán)依賴之問題復現詳解

    Spring循環(huán)依賴之問題復現詳解

    這篇文章主要為大家詳細介紹了Spring的循環(huán)依賴什么時候會出現以及如何解決循環(huán)依賴,文中的示例代碼講解詳細,感興趣的可以學習一下
    2022-07-07
  • 猜數游戲java實現代碼

    猜數游戲java實現代碼

    這篇文章主要為大家詳細介紹了java實現猜數游戲代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 關于Spring總結(必看篇)

    關于Spring總結(必看篇)

    下面小編就為大家?guī)硪黄P于Spring總結(必看篇)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 詳解Kotlin 高階函數 與 Lambda 表達式

    詳解Kotlin 高階函數 與 Lambda 表達式

    這篇文章主要介紹了詳解Kotlin 高階函數 與 Lambda 表達式的相關資料,需要的朋友可以參考下
    2017-06-06
  • 詳解Java 信號量Semaphore

    詳解Java 信號量Semaphore

    這篇文章主要介紹了Java 信號量Semaphore的相關資料,幫助大家更好的理解和學習Java并發(fā),感興趣的朋友可以了解下
    2020-09-09
  • Java中實體與Map之間的相互轉換代碼示例

    Java中實體與Map之間的相互轉換代碼示例

    生活中經常用到map數據與實體類的轉換,下面這篇文章主要給大家介紹了關于Java中實體與Map之間相互轉換的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Java訪問WebService返回XML數據的方法

    Java訪問WebService返回XML數據的方法

    這篇文章主要介紹了Java訪問WebService返回XML數據的方法,涉及java操作WebService的相關技巧,需要的朋友可以參考下
    2015-06-06
  • Spring Boot+Mybatis的整合過程

    Spring Boot+Mybatis的整合過程

    這篇文章主要介紹了Spring Boot+Mybatis的整合過程,需要的朋友可以參考下
    2017-07-07
  • Java8新特性-Lambda表達式詳解

    Java8新特性-Lambda表達式詳解

    Java 8 (又稱為 jdk 1.8) 是 Java 語言開發(fā)的一個主要版本。Lambda 表達式,也可稱為閉包,它是推動 Java 8 發(fā)布的最重要新特性。本文通過詳細的代碼示例介紹了Java8新特性感興趣的朋友可以參考一下
    2023-04-04

最新評論

界首市| 白山市| 乌拉特前旗| 郧西县| 武冈市| 磐石市| 杭锦后旗| 陵川县| 阳高县| 施甸县| 嵩明县| 永修县| 关岭| 阜新市| 昭苏县| 高密市| 砀山县| 泉州市| 盐津县| 澄迈县| 萨嘎县| 石景山区| 隆子县| 灯塔市| 扎囊县| 揭东县| 乳源| 如东县| 仙游县| 蓝山县| 玉门市| 昌都县| 察雅县| 濮阳县| 明溪县| 左贡县| 霍山县| 麟游县| 安顺市| 永新县| 灵台县|