日韩性视频-久久久蜜桃-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模式四种线程安全的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品无码久久久久久久久果冻 | 99色在线视频 | 成年人看的羞羞网站 | 医生强烈淫药h调教小说视频 | 一区二区三区中文字幕 | 亚洲欧美乱日韩乱国产 | 国产精品乱码一区二区三区 | 电影寂寞少女免费观看 | 女人叫床高潮娇喘声录音mp3 | 97在线观视频免费观看 | 美女av免费| 久一区二区三区 | 国产精品久久久久三级无码 | 欧美亚洲二区 | 久久偷拍免费视频 | 久久综合亚洲色hezyo国产 | 老司机午夜av | 美日韩黄色 | 九九热视频免费 | 成人av免费网站 | 非洲黄色片 | 老版k8经典电影 | 欧洲女同同性吃奶 | 91亚洲精选| 中文字幕在线乱 | 被黑人各种姿势猛c哭h文1 | 麻豆视频免费观看 | 韩国在线不卡 | 亚洲三区在线观看无套内射 | 欧美日韩国产成人精品 | 逼特逼视频在线观看 | 欧美三级午夜理伦三级老人 | 美女性高潮视频 | 性xxxx欧美老肥妇牲乱 | 草草影院在线观看视频 | 成人精品水蜜桃 | 自由 日本语 热 亚洲人 | 欧美亚洲在线视频 | 在线观看一区 | 波多野结衣电影免费观看 | 欧美视频一区二区三区四区在线观看 | 亚洲v日本| www,超碰| 午夜影院福利 | 91手机视频在线观看 | 国产精品五区 | 在线va视频 | 国模在线观看 | 七月婷婷综合 | 成人影片网址 | av成人免费在线 | 97超碰国产在线 | 91成人短视频 | 亚洲m码 欧洲s码sss222 | 久热这里只有精品在线 | 嫩草国产在线 | 中文字幕av久久 | 一二三不卡 | 人人射人人插 | 老湿影院av| 亚洲春色一区二区三区 | 久国久产久精永久网页 | 欧美日韩久久婷婷 | 亚洲第一成网站 | 亚洲综合图色40p | 午夜小电影 | 男人天堂手机在线观看 | 天天爱天天插 | 亚洲av无码一区二区三区在线播放 | 456av| 在线观看国产小视频 | 欧洲久久久久久 | 熟女丰满老熟女熟妇 | 黑人操欧美人 | 德国老妇性猛交 | 国产成人在线观看免费网站 | 69av在线播放 | 水蜜桃91| 波多野结衣一区二区三区中文字幕 | www.日本在线 | 亚洲资源网 | 老司机深夜福利网站 | 色老久久| 欧美久久久久久久久久久久 | 国产18禁黄网站免费观看 | 日韩精品一区二区三区 | 精品国产一区二区三区四 | 国产伦乱视频 | 欧美r级在线 | 欧美激情网站 | 国产精品久久久久电影 | 夜色快播 | 亚洲精选av| 男人手机天堂 | 黑丝袜av | 蜜桃视频无码区在线观看 | 中国一级特黄真人毛片免费观看 | 午夜精品久久久久久久久久久久久蜜桃 | 国产精品国色综合久久 |