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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Singleton单例模式

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Singleton单例模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。
在計算機系統中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。

public class SingletonTest{public static void Test(){var tasks = new List<Task>();for (int i = 0; i < 20; i++){tasks.Add(new Task(() =>{Singleton singleton = Singleton.Instance();singleton.GetData();}));}//并發執行20個任務tasks.AsParallel().ForAll(p => p.Start());}private class Singleton{/// <summary>/// 靜態實例,利用靜態字段把實例緩存起來/// </summary>private static Singleton singleton;/// <summary>/// 返回對象的唯一實例/// </summary>/// <returns></returns>public static Singleton Instance(){if (singleton == null){Console.WriteLine("實例化對象");singleton = new Singleton();}return singleton;}public void GetData(){Console.WriteLine("調用了getdata()");}} }

看下執行結果

實例化對象動作執行了4次,說明并發情況下有問題;

改下實現方式,增加鎖

public static Singleton Instance(){if (singleton == null){lock (lockObj){Console.WriteLine("實例化對象");singleton = new Singleton();}}return singleton;}

看下執行結果

依然不能保證

加鎖并雙重驗證

public static Singleton Instance(){if (singleton == null){lock (lockObj){if (singleton == null){Console.WriteLine("實例化對象");singleton = new Singleton();}}}return singleton;}

看下執行結果

這下就不會有并發的問題了

轉載于:https://www.cnblogs.com/sands/p/11460249.html

總結

以上是生活随笔為你收集整理的Singleton单例模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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