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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式:单例模式的写法(基础写法和线程安全写法)

發布時間:2023/12/31 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式:单例模式的写法(基础写法和线程安全写法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單例模式的寫法非常多。先給出一種最基礎的寫法:

(A種寫法):

package singleton;public class SingletonInstance {private static SingletonInstance mSingletonInstance = null;// 特意將構造函數設置成 private,防止外部使用者new SingletonInstance()。private SingletonInstance() {}public static SingletonInstance getInstance() {if (mSingletonInstance == null) {mSingletonInstance = new SingletonInstance();}return mSingletonInstance;} }

A寫法是單例模式最簡單、最基礎、最清晰的寫法。但遺憾的是這樣的寫法是線程不安全的代碼寫法。

假設該類同一時候在并發N多個線程中被訪問被使用、尤其是假設這個類假設涉及到數據庫訪問等等此類線程安全問題敏感的代碼應用場景時,后果將是一場災難。

但單例模式的A種寫法也有其廣泛場景:不要求線程安全,沒有同步需求且效率優先級高的場景中。推薦使用單例模式的A種寫法。


B種寫法(線程安全寫法1):


package singleton;public class SingletonInstance {private static SingletonInstance mSingletonInstance = null;// 特意將構造函數設置成 private。防止外部使用者new SingletonInstance()。

private SingletonInstance() { } public static synchronized SingletonInstance getInstance() { if (mSingletonInstance == null) { mSingletonInstance = new SingletonInstance(); } return mSingletonInstance; } }


單例模式的B種寫法事實上是在A種寫法的基礎上的改進。要點是添加了同步機制:synchronized。

synchronized ,同步從某種意義上講事實上就是堵塞,堵塞的結果就是隨意時刻,僅僅有一個線程能夠訪問該段同步方法體中的代碼。這樣被synchronized的代碼性能將下降,但達到了線程安全的目的。

B種單例模式的寫法。主要是為了解決線程安全。

變體非常多。變體的目的主要集中在怎樣增強線程安全的操作性。現舉比例如以下,比方:

B種寫法的增強型變體(線程安全寫法2):

package singleton;public class SingletonInstance {// 注意!

volatile 也不能全然保證線程安全,后面將寫關于volatile的文章解釋這一點兒。 // volatile僅僅是增強。

private static volatile SingletonInstance mSingletonInstance = null; // 特意將構造函數設置成 private。防止外部使用者new SingletonInstance()。 private SingletonInstance() { } public static SingletonInstance getInstance() { if (mSingletonInstance == null) { // synchronized (SingletonInstance.class)不必鎖住整個方法,僅僅鎖住一塊代碼就可以。 // 和synchronized (this)一樣,但由于是static方法。故無法使用this。才使用XXXClass.class // synchronized的基本使用原則:盡可能不要鎖住大塊大塊代碼(方法體或類),僅僅鎖住必需的一小塊核心、急需同步的代碼段就可以,越少越好,越小越好。 // 要知道,一旦使用synchronized,就意味著代碼性能的開銷 synchronized (SingletonInstance.class) { if (mSingletonInstance == null) mSingletonInstance = new SingletonInstance(); } } return mSingletonInstance; } }


 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的设计模式:单例模式的写法(基础写法和线程安全写法)的全部內容,希望文章能夠幫你解決所遇到的問題。

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