中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

做網(wǎng)站群發(fā)外鏈平臺

做網(wǎng)站群,發(fā)外鏈平臺,做神馬網(wǎng)站優(yōu)化快,落實(shí)政府網(wǎng)站集約化建設(shè)工作目錄 引言 1. 單例模式的核心思想 2. 單例模式的實(shí)現(xiàn)方式 2.1 餓漢式單例 2.2 懶漢式單例 2.3 線程安全的懶漢式單例 2.4 雙重檢查鎖定(Double-Checked Locking) 2.5 靜態(tài)內(nèi)部類實(shí)現(xiàn)單例 2.6 枚舉實(shí)現(xiàn)單例 3. 單例模式的使用場景 4. 單例模式…

目錄

引言

1. 單例模式的核心思想

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

2.1 餓漢式單例

2.2 懶漢式單例

2.3 線程安全的懶漢式單例

2.4 雙重檢查鎖定(Double-Checked Locking)

2.5 靜態(tài)內(nèi)部類實(shí)現(xiàn)單例

2.6 枚舉實(shí)現(xiàn)單例

3. 單例模式的使用場景

4. 單例模式的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

缺點(diǎn):

5. 總結(jié)


引言

單例模式(Singleton Pattern)是設(shè)計(jì)模式中最簡單且最常用的創(chuàng)建型模式之一。它的核心思想是確保一個類只有一個實(shí)例,并提供一個全局訪問點(diǎn)來獲取該實(shí)例。單例模式在許多場景中非常有用,例如配置管理、線程池、數(shù)據(jù)庫連接池等。


1. 單例模式的核心思想

單例模式的核心思想是:

  1. 私有化構(gòu)造函數(shù):防止外部通過?new?關(guān)鍵字創(chuàng)建實(shí)例。

  2. 提供一個靜態(tài)方法:用于獲取類的唯一實(shí)例。

  3. 確保唯一性:在整個應(yīng)用程序生命周期中,類的實(shí)例只有一個。


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

單例模式有多種實(shí)現(xiàn)方式,每種方式都有其優(yōu)缺點(diǎn)。以下是幾種常見的實(shí)現(xiàn)方式:

2.1 餓漢式單例

餓漢式單例在類加載時就創(chuàng)建實(shí)例,因此是線程安全的。

public class Singleton {// 在類加載時創(chuàng)建實(shí)例private static final Singleton INSTANCE = new Singleton();// 私有化構(gòu)造函數(shù)private Singleton() {}// 提供全局訪問點(diǎn)public static Singleton getInstance() {return INSTANCE;}
}

餓漢式是最簡單的單例模式的寫法,保證了線程的安全,在很長的時間里,我都是餓漢模式來完成單例 的,因?yàn)閴蚝唵?#xff0c;后來才知道餓漢式會有一點(diǎn)小問題,看下面的代碼:

 public class Hungry {private byte[] data1 = new byte[1024];private byte[] data2 = new byte[1024];private byte[] data3 = new byte[1024];private byte[] data4 = new byte[1024];private Hungry() {}private final static Hungry hungry = new Hungry();public static Hungry getInstance() {return hungry;}}

?在Hungry類中,我定義了四個byte數(shù)組,當(dāng)代碼一運(yùn)行,這四個數(shù)組就被初始化,并且放入內(nèi)存了,如 果長時間沒有用到getInstance方法,不需要Hungry類的對象,這不是一種浪費(fèi)嗎?我希望的是 只有用 到了 getInstance方法,才會去初始化單例類,才會加載單例類中的數(shù)據(jù)。所以就有了 第二種單例模 式:懶漢式。

優(yōu)點(diǎn)

  • 實(shí)現(xiàn)簡單,線程安全。

缺點(diǎn)

  • 如果實(shí)例未被使用,會造成資源浪費(fèi)。


2.2 懶漢式單例

懶漢式單例在第一次調(diào)用?getInstance()?時才創(chuàng)建實(shí)例。

public class LazyMan {private LazyMan() {System.out.println(Thread.currentThread().getName()+"Start");}private static LazyMan lazyMan;public static LazyMan getInstance() {if (lazyMan == null) {lazyMan = new LazyMan();}return lazyMan;}// 測試并發(fā)環(huán)境,發(fā)現(xiàn)單例失效public static void main(String[] args) {for (int i = 0; i < 10; i++) {new Thread(()->{LazyMan.getInstance();}).start();}}}

缺點(diǎn)

  • 線程不安全,多個線程可能同時進(jìn)入?if (instance == null)?條件,導(dǎo)致創(chuàng)建多個實(shí)例。


2.3 線程安全的懶漢式單例

通過在?getInstance()?方法上加鎖,可以解決懶漢式單例的線程安全問題。

public class LazyMan {private LazyMan() {}private static LazyMan lazyMan;public static LazyMan getInstance() {if (lazyMan == null) {synchronized (LazyMan.class) {if (lazyMan == null) {lazyMan = new LazyMan();}}}return lazyMan;}}

保證了線程的安全性,又符合了懶加載,只有在用到的時候,才會去初始化,調(diào)用 效率也比較高,但是這種寫法在極端情況還是可能會有一定的問題。因?yàn)?:

lazyMan = new LazyMan();

不是原子性操作,至少會經(jīng)過三個步驟:

1. 分配對象內(nèi)存空間

2. 執(zhí)行構(gòu)造方法初始化對象

3. 設(shè)置instance指向剛分配的內(nèi)存地址,此時instance !=null;

由于指令重排,導(dǎo)致A線程執(zhí)行 lazyMan = new LazyMan();的時候,可能先執(zhí)行了第三步(還沒執(zhí)行第 二步),此時線程B又進(jìn)來了,發(fā)現(xiàn)lazyMan已經(jīng)不為空了,直接返回了lazyMan,并且后面使用了返回 的lazyMan,由于線程A還沒有執(zhí)行第二步,導(dǎo)致此時lazyMan還不完整,可能會有一些意想不到的錯 誤,所以就有了下面一種單例模式。


2.4 雙重檢查鎖定(Double-Checked Locking)

雙重檢查鎖定是一種優(yōu)化后的線程安全懶漢式單例實(shí)現(xiàn)方式。

這種單例模式只是在上面DCL單例模式增加一個volatile關(guān)鍵字來避免指令重排:

 public class LazyMan {private LazyMan() {}private volatile static LazyMan lazyMan;public static LazyMan getInstance() {if (lazyMan == null) {synchronized (LazyMan.class) {if (lazyMan == null) {lazyMan = new LazyMan();}}}return lazyMan;}
}

優(yōu)點(diǎn)

  • 線程安全,且只有在第一次創(chuàng)建實(shí)例時加鎖,性能較好。

注意

  • 必須使用?volatile?關(guān)鍵字,防止指令重排序?qū)е碌膯栴}。


2.5 靜態(tài)內(nèi)部類實(shí)現(xiàn)單例

靜態(tài)內(nèi)部類實(shí)現(xiàn)單例是一種優(yōu)雅且線程安全的方式。

public class Singleton {private Singleton() {}private static class SingletonHolder {private static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}

優(yōu)點(diǎn)

  • 線程安全,且只有在調(diào)用?getInstance()?時才會加載?SingletonHolder?類,實(shí)現(xiàn)懶加載。


2.6 枚舉實(shí)現(xiàn)單例

枚舉實(shí)現(xiàn)單例是《Effective Java》推薦的方式,它天然支持線程安全和防止反射攻擊。

public enum Singleton {INSTANCE;public void doSomething() {System.out.println("Doing something...");}
}

優(yōu)點(diǎn)

  • 線程安全,代碼簡潔,防止反射和序列化破壞單例。


3. 單例模式的使用場景

單例模式適用于以下場景:

  1. 全局配置管理:例如讀取配置文件,確保配置信息全局唯一。

  2. 數(shù)據(jù)庫連接池:確保連接池只有一個實(shí)例,避免資源浪費(fèi)。

  3. 日志管理:確保日志記錄器全局唯一。

  4. 線程池:確保線程池的唯一性,避免重復(fù)創(chuàng)建線程。


4. 單例模式的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 節(jié)省資源:避免重復(fù)創(chuàng)建對象,減少內(nèi)存開銷。

  • 全局訪問點(diǎn):方便對唯一實(shí)例的管理和訪問。

缺點(diǎn):

  • 擴(kuò)展性差:單例類通常難以擴(kuò)展,因?yàn)槠錁?gòu)造函數(shù)是私有的。

  • 違背單一職責(zé)原則:單例類既負(fù)責(zé)創(chuàng)建實(shí)例,又負(fù)責(zé)業(yè)務(wù)邏輯。

  • 測試?yán)щy:單例類的全局狀態(tài)可能導(dǎo)致測試?yán)щy。


5. 總結(jié)

單例模式是一種簡單但強(qiáng)大的設(shè)計(jì)模式,適用于需要全局唯一實(shí)例的場景。通過不同的實(shí)現(xiàn)方式(如餓漢式、懶漢式、雙重檢查鎖定、靜態(tài)內(nèi)部類、枚舉等),可以滿足不同的需求。

在實(shí)際開發(fā)中,應(yīng)根據(jù)具體場景選擇合適的單例實(shí)現(xiàn)方式。如果需要懶加載且線程安全,推薦使用靜態(tài)內(nèi)部類或枚舉實(shí)現(xiàn);如果需要更高的性能,可以考慮雙重檢查鎖定。

http://www.risenshineclean.com/news/2872.html

相關(guān)文章:

  • 濟(jì)南專業(yè)做網(wǎng)站的公司哪家好信息流優(yōu)化師證書
  • 怎么用flash做網(wǎng)站網(wǎng)絡(luò)營銷手段有哪些方式
  • 網(wǎng)站設(shè)計(jì)方法制作公司網(wǎng)站的公司
  • 做網(wǎng)站的哪里好站長工具seo綜合查詢columbu cat
  • 推廣做任務(wù) 有哪些網(wǎng)站南寧網(wǎng)站推廣營銷
  • 自己編輯網(wǎng)站怎么做的域名備案
  • 網(wǎng)站群建設(shè)目標(biāo)網(wǎng)絡(luò)營銷經(jīng)典案例
  • php可以做視頻網(wǎng)站如何做好網(wǎng)絡(luò)營銷工作
  • 數(shù)據(jù)庫網(wǎng)站開發(fā)外文翻譯競價托管代運(yùn)營
  • 做網(wǎng)站需要租服務(wù)器嗎線上推廣平臺都有哪些
  • 自己做的網(wǎng)站怎么綁域名杭州seo網(wǎng)絡(luò)公司
  • 陵縣網(wǎng)站建設(shè)如何免費(fèi)注冊網(wǎng)站
  • 網(wǎng)站開發(fā)后端是什么免費(fèi)刷網(wǎng)站百度關(guān)鍵詞
  • 校史網(wǎng)站開發(fā)技術(shù)百度一下手機(jī)版首頁
  • wordpress建站數(shù)據(jù)庫軟文范例大全100
  • 動漫做h在線觀看網(wǎng)站百度一下官方網(wǎng)頁
  • 國家示范校建設(shè)成果網(wǎng)站百度快照排名
  • 網(wǎng)站建設(shè)專用圖形庫seo網(wǎng)站內(nèi)容優(yōu)化有哪些
  • 虛擬空間官網(wǎng)衡陽有實(shí)力seo優(yōu)化
  • 睢寧網(wǎng)站建設(shè)xzqjwl深圳推廣公司有哪些
  • 網(wǎng)站開發(fā)開題報告怎樣推廣一個產(chǎn)品
  • 費(fèi)縣做網(wǎng)站收錄提交入口網(wǎng)址
  • wordpress 做公司網(wǎng)站網(wǎng)絡(luò)營銷的推廣
  • 網(wǎng)站下雪的效果怎么做的一鍵制作網(wǎng)站
  • 個人網(wǎng)站模板之家吳中seo網(wǎng)站優(yōu)化軟件
  • 網(wǎng)站做采集會有問題么寧波最好的推廣平臺
  • 哪家專門做特賣網(wǎng)站百度搜索網(wǎng)頁
  • wordpress 簡約windows優(yōu)化大師最新版本
  • 常熟網(wǎng)站建設(shè)icp備案長沙網(wǎng)址seo
  • 最專業(yè)的佛山網(wǎng)站建設(shè)牛排seo系統(tǒng)