日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

singleton模式四种线程安全的实现

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 singleton模式四种线程安全的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.描述:

????Singleton(單例)是設計模式的一種,為了保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

2.主要特點:?????

????1)單例類確保自己只有一個實例(構造函數私有:不被外部實例化,也不被繼承)。

????2)單例類必須自己創建自己的實例。

????3)單例類必須為其他對象提供唯一的實例。

3.單例模式的應用:

????資源管理器,回收站,打印機資源,線程池,緩存,配置信息類,管理類,控制類,門面類,代理類通常被設計為單例類

????如果程序有多個類加載器又同時使用單例模式就有可能多個單例并存就要找相應解決方法了

4.實現方法:

如果應用程序總是創建并使用單例實例或在創建和運行時開銷不大。


1).Eager initialization?餓漢式單例類(依賴jvm在加載類時創建唯一單例實例)

public class EagerSingleton { // jvm保證在任何線程訪問uniqueInstance靜態變量之前一定先創建了此實例 private static EagerSingleton uniqueInstance = new EagerSingleton(); // 私有的默認構造子,保證外界無法直接實例化 private EagerSingleton() { } // 提供全局訪問點獲取唯一的實例 public static EagerSingleton getInstance() { return uniqueInstance; } } 如果開銷比較大,希望用到時才創建就要考慮延遲實例化,或者Singleton的初始化需要某些外部資源(比如網絡或存儲設備),就要用后面的方法了.

2)Lazy initialization?懶漢式單例類

public class LazySingleton { private static LazySingleton uniqueInstance; private LazySingleton() { } public static synchronized LazySingleton getInstance() { if (uniqueInstance == null) uniqueInstance = new LazySingleton(); return uniqueInstance; } } 同步一個方法可能造成程序執行效率下降100倍,完全沒有必要每次調用getInstance都加鎖,事實上我們只想保證一次初始化成功,其余的快速返回而已,如果在getInstance頻繁使用的地方就要考慮重新優化了.

3)"雙檢鎖"(Double-Checked Lock)盡量將"加鎖"推遲,只在需要時"加鎖"(僅適用于java 5.0 以上版本,volatile保證原子操作)?
happens-before:"什么什么一定在什么什么之前運行",也就是保證順序性.
現在的CPU有亂序執行的能力(也就是指令會亂序或并行運行,可以不按我們寫代碼的順序執行內存的存取過程),并且多個CPU之間的緩存也不保證實時同步,只有上面的happens-before所規定的情況下才保證順序性.

JVM能夠根據CPU的特性(CPU的多級緩存系統、多核處理器等)適當的重新排序機器指令,使機器指令更符合CPU的執行特點,最大限度的發揮機器的性能.

如果沒有volatile修飾符則可能出現一個線程t1的B操作和另一線程t2的C操作之間對instance的讀寫沒有happens-before,可能會造成的現象是t1的B操作還沒有完全構造成功,但t2的C已經看到instance為非空,這樣t2就直接返回了未完全構造的instance的引用,t2想對instance進行操作就會出問題.

????volatile 的功能:
1. 避免編譯器將變量緩存在寄存器里??
2. 避免編譯器調整代碼執行的順序

優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。

public class DoubleCheckedLockingSingleton { // java中使用雙重檢查鎖定機制,由于Java編譯器和JIT的優化的原因系統無法保證我們期望的執行次序。 // 在java5.0修改了內存模型,使用volatile聲明的變量可以強制屏蔽編譯器和JIT的優化工作 private volatile static DoubleCheckedLockingSingleton uniqueInstance; private DoubleCheckedLockingSingleton() { } public static DoubleCheckedLockingSingleton getInstance() { if (uniqueInstance == null) { synchronized (DoubleCheckedLockingSingleton.class) { if (uniqueInstance == null) { uniqueInstance = new DoubleCheckedLockingSingleton(); } } } return uniqueInstance; } } 4)Lazy initialization holder class 滿足所有 Double-Checked Locking 滿足的條件,并且沒有顯示的同步操作
public class LazyInitHolderSingleton { private LazyInitHolderSingleton() { } private static class SingletonHolder { private static final LazyInitHolderSingleton INSTANCE = new LazyInitHolderSingleton(); } public static LazyInitHolderSingleton getInstance() { return SingletonHolder.INSTANCE; } } 根據jvm規范,當某對象第一次調用LazyInitHolderSingleton.getInstance()時,LazyInitHolderSingleton類被首次主動使用,jvm對其進行初始化(此時并不會調用LazyInitHolderSingleton()構造方法),然后LazyInitHolderSingleton調用getInstance()方法,該方法中,又首次主動使用了SingletonHolder類,所以要對SingletonHolder類進行初始化,初始化中,INSTANCE常量被賦值時才調用了?LazyInitHolderSingleton的構造方法LazyInitHolderSingleton(),完成了實例化并返回該實例。 當再有對象(也許是在別的線程中)再次調用LazyInitHolderSingleton.getInstance()時,因為已經初始化過了,不會再進行初始化步驟,所以直接返回INSTANCE常量即同一個LazyInitHolderSingleton實例。

總結

以上是生活随笔為你收集整理的singleton模式四种线程安全的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲人成777 | 亚洲看片网| 亚州久久久 | 天天视频黄色 | 日韩亚洲欧美中文字幕 | 欧美性视频一区二区三区 | 日韩一级片免费观看 | 中文字幕成人 | 一个色综合导航 | 一区二区精品久久 | 午夜精品久久久久久毛片 | 亚洲欧美一区二区三区孕妇 | 波多野结衣在线免费视频 | 亚洲性色av| 欧美黑人欧美精品刺激 | 九九久久精品 | 日韩精品系列 | 99久久精品免费 | 国产在线观看一区二区三区 | 黄色一级视频在线观看 | 久久综合色网 | 免费无码不卡视频在线观看 | 性高潮在线观看 | 色婷综合 | 男人天堂2024 | 日本a级片在线播放 | 国产激情91| 欧美精品99久久 | 国产一区二区av | 国产精品日韩精品 | 可以直接看的无码av | 男生把女生困困的视频 | 久久国产美女视频 | 久草成人在线视频 | 欧美成人性生活片 | 日韩一级欧美一级 | 午夜淫片| 最新av中文字幕 | 精品国产1区 | 无码人妻少妇色欲av一区二区 | 91成人免费网站 | 日美韩一区二区三区 | 亚洲综合五月 | 天堂在线视频 | 五月天综合色 | 精品人妻一区二区三区麻豆91 | 91亚洲精品久久久蜜桃借种 | 三级免费看 | 亚洲欧美一区二区在线观看 | 亚洲自拍色图 | 一本色道久久88综合日韩精品 | 亚洲色图视频网站 | av网站一区二区 | 五月婷婷六月丁香 | 国产最新精品 | 久久久全国免费视频 | 国产一级做a爱免费视频 | 国产精品久久久久久久久久久免费看 | 国产校园春色 | 毛片一区二区三区 | 99精品人妻少妇一区二区 | 香蕉污视频在线观看 | 爽好多水快深点欧美视频 | 狂野欧美性猛交blacked | 沟厕沟厕近拍高清视频 | 狠狠干狠狠操视频 | 婷婷激情影院 | 大尺度舌吻呻吟声 | 91久久国产综合久久91精品网站 | 亚洲综合成人在线 | 毛片精品 | 夜夜天堂 | 雨宫琴音一区二区三区 | 国产无限制自拍 | 国产小视频网址 | 污的网站| 色老汉av一区二区三区 | 欧美一级淫片免费视频魅影视频 | 欧美日韩999 | 日本不卡视频在线观看 | 一本色道久久综合亚洲精品酒店 | 欧美国产三级 | 女av在线| 亚洲s码欧洲m码国产av | 人人舔人人 | 永久看看免费大片 | 在线视频一区二区三区四区 | 蜜臀av夜夜澡人人爽人人 | 91高跟黑色丝袜呻吟动态图 | 夜夜成人 | bangbros性欧美18| 男ji大巴进入女人视频 | 国产成人无码av | 五月婷婷在线观看视频 | 国产欧美日韩综合精品一区二区 | 亚洲性欧美 | 久久视频免费在线观看 | 中文字幕无码人妻少妇免费 | 久久22 |