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

5分鐘搞定java單例模式

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

單例模式

單例模式(Singleton),也叫單子模式,是一種常用的軟件設(shè)計(jì)模式。在應(yīng)用這個(gè)模式時(shí),單例對(duì)象的類必須保證只有一個(gè)實(shí)例存在。許多時(shí)候整個(gè)系統(tǒng)只需要擁有一個(gè)的全局對(duì)象,這樣有利于我們協(xié)調(diào)系統(tǒng)整體的行為。

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

單例模式的運(yùn)用場(chǎng)景

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

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

多線程的線程池的設(shè)計(jì)一般也是采用單例模式,這是由于線程池要方便對(duì)池中的線程進(jìn)行控制。

實(shí)現(xiàn)單例模式的方法思路

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

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

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

實(shí)現(xiàn)單例模式的方式

01懶漢單例式

天生線程不安全:這種方式是最基本的實(shí)現(xiàn)方式,這種實(shí)現(xiàn)最大的問題就是不支持多線程。因?yàn)闆]有加鎖 synchronized,所以嚴(yán)格意義上它并不算單例模式。

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

02餓漢單列式

這種方式比較常用,但容易產(chǎn)生垃圾對(duì)象。

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

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

04枚舉

這種實(shí)現(xiàn)方式還沒有被廣泛采用,但這是實(shí)現(xiàn)單例模式的最佳方法。它更簡(jiǎn)潔,自動(dòng)支持序列化機(jī)制,絕對(duì)防止多次實(shí)例化。

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

餓漢式在類創(chuàng)建的同時(shí)就實(shí)例化一個(gè)靜態(tài)對(duì)象出來,不管之后會(huì)不會(huì)使用這個(gè)單例,都會(huì)占據(jù)一定的內(nèi)存,但是相應(yīng)的,在第一次調(diào)用時(shí)速度也會(huì)更快,因?yàn)槠滟Y源已經(jīng)初始化完成。

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

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

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

相關(guān)文章

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

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

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

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

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

    猜數(shù)游戲java實(shí)現(xiàn)代碼

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

    關(guān)于Spring總結(jié)(必看篇)

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

    詳解Kotlin 高階函數(shù) 與 Lambda 表達(dá)式

    這篇文章主要介紹了詳解Kotlin 高階函數(shù) 與 Lambda 表達(dá)式的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解Java 信號(hào)量Semaphore

    詳解Java 信號(hào)量Semaphore

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

    Java中實(shí)體與Map之間的相互轉(zhuǎn)換代碼示例

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

    Java訪問WebService返回XML數(shù)據(jù)的方法

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

    Spring Boot+Mybatis的整合過程

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

    Java8新特性-Lambda表達(dá)式詳解

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

最新評(píng)論

濉溪县| 雷波县| 临沭县| 遂川县| 平阴县| 舞钢市| 明水县| 渑池县| 沧源| 自治县| 锦屏县| 陈巴尔虎旗| 景洪市| 永济市| 溆浦县| 介休市| 锦屏县| 南投县| 大荔县| 石嘴山市| 信宜市| 亚东县| 合作市| 晴隆县| 德庆县| 云阳县| 永顺县| 宣恩县| 德安县| 旺苍县| 土默特右旗| 都兰县| 乌鲁木齐县| 依兰县| 祁连县| 灵武市| 青浦区| 藁城市| 仁怀市| 平远县| 西华县|