亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

5分鐘搞定java單例模式

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

單例模式

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

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

單例模式的運用場景

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

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

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

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

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

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

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

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

01懶漢單例式

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

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

02餓漢單列式

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

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

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

04枚舉

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

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

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

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

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

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

相關文章

  • 基于MapReduce實現(xiàn)決策樹算法

    基于MapReduce實現(xiàn)決策樹算法

    這篇文章主要為大家詳細介紹了基于MapReduce實現(xiàn)決策樹算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • SpringCloud安裝Nacos完成配置中心

    SpringCloud安裝Nacos完成配置中心

    如果不滿足上篇文章的eureka注冊中心,那么本文記錄的Nacos是不二之選。本文主要記錄Springboot基于Nacos實現(xiàn)配置中心
    2022-07-07
  • JavaWeb實現(xiàn)表單提交的示例詳解

    JavaWeb實現(xiàn)表單提交的示例詳解

    這篇文章主要介紹了如何利用JavaWeb實現(xiàn)表單提交功能,文中的示例代碼講解詳細,對我們學習JavaWeb有一定幫助,感興趣的可以了解一下
    2022-03-03
  • Java API如何實現(xiàn)向Hive批量導入數(shù)據(jù)

    Java API如何實現(xiàn)向Hive批量導入數(shù)據(jù)

    這篇文章主要介紹了Java API如何實現(xiàn)向Hive批量導入數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Springboot2.3.x整合Canal的示例代碼

    Springboot2.3.x整合Canal的示例代碼

    canal是阿里開源mysql?binlog?數(shù)據(jù)組件,canal-server?才是canal的核心我們前邊所講的canal的功能,實際上講述的就是canal-server的功能,本文給大家介紹Springboot2.3.x整合Canal的示例代碼,需要的朋友可以參考下
    2022-02-02
  • Java的long和bigint長度對比詳解

    Java的long和bigint長度對比詳解

    在本文中小編給大家分享了關于Java的long和bigint長度比較的知識點內容,有興趣的朋友們學習參考下。
    2019-07-07
  • 關于Hibernate的一些學習心得總結

    關于Hibernate的一些學習心得總結

    Hibernate是一個優(yōu)秀的Java 持久化層解決方案,是當今主流的對象—關系映射(ORM)工具
    2013-07-07
  • Java單例模式的深入了解

    Java單例模式的深入了解

    這篇文章主要為大家介紹了Java單例模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java從源碼看異步任務計算FutureTask

    Java從源碼看異步任務計算FutureTask

    這篇文章主要介紹了Java從源碼看異步任務計算FutureTask,F(xiàn)utureTask就能夠很好的幫助我們實現(xiàn)異步計算,并且可以實現(xiàn)同步獲取異步任務的計算結果,具體是怎樣實現(xiàn)的,下面我們就一起來學習下面文章的具體內容吧
    2022-04-04
  • Jax-rs規(guī)范下REST接口使用方法詳解

    Jax-rs規(guī)范下REST接口使用方法詳解

    這篇文章主要介紹了Jax-rs規(guī)范下REST接口使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09

最新評論