<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          5分鐘搞定Java單例模式!

          共 1615字,需瀏覽 4分鐘

           ·

          2021-05-12 08:54



          單例模式

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

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


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


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


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


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


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


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


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


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


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


          01

          懶漢單例式

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



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



          02

          餓漢單列式


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



          03

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


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



          04

          枚舉


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



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


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


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


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

          如果你還未走入編程的世界,不妨先來了解一下編程的世界,再去選擇學(xué)習(xí)哪一個吧!


          對于想學(xué)互聯(lián)網(wǎng)技術(shù)卻又不敢貿(mào)然行動的同學(xué),點(diǎn)擊下方“閱讀原文即可報(bào)名達(dá)內(nèi)免費(fèi)試聽課,這是你免費(fèi)了解、學(xué)習(xí)的技術(shù)最佳途徑,體驗(yàn)名師面對面教導(dǎo),多年實(shí)戰(zhàn)經(jīng)驗(yàn)傾囊相授,少走彎路,零基礎(chǔ)快速入門到精通!


          學(xué)互聯(lián)網(wǎng)技術(shù)不能猶豫,否則你就和高薪擦肩而過了。不論你是0基礎(chǔ)還是轉(zhuǎn)行,都有大牛老師手把手教你學(xué)習(xí)最新熱門技術(shù),找一份自己滿意的高薪工作。

          課程咨詢后臺回復(fù):客服,真人在線答疑方便又快捷。達(dá)妹微信:tedu521,獲取學(xué)習(xí)資源。


          IT方向技術(shù)內(nèi)容免費(fèi)學(xué)

          Java/Java架構(gòu)師/Java大數(shù)據(jù)

          掃碼即可免費(fèi)預(yù)約

          ↓↓↓


          點(diǎn)擊下方“閱讀原文”搶免費(fèi)試聽名額吧!

          瀏覽 118
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  玖玖视频在线观看 | 亚洲+无码+欧美+另类 | 在线观看黄黄片 | 狼人永久地址在线观看高清无码 | 精品日韩人妻无码一区二区三区四区 |