zoukankan      html  css  js  c++  java
  • 第四节:单例模式对缓存进行管理

    一. 章前小结

     在前一个章节中,我们通过IOC的的模式解决了发布后动态切换缓存类型问题,通过CallContext数据槽解决了单线程的实例唯一的问题,那么如果解决全局实例唯一(即多线程内实例唯一),我们很容易的想到了单例模式,提到单例模式,我们很容易想到单例模式的三种形式。

       详见:单例模式

    二. 构建步骤

      利用静态构造函数的单例模式来构建缓存管理类CacheManager。

     1   /// <summary>
     2     /// 缓存管理类(单例模式管理)
     3     /// </summary>
     4     public class CacheManager
     5     {
     6         private static string ICacheDllName = ConfigurationManager.AppSettings["ICacheDllName"];
     7         private static string ICacheClassName = ConfigurationManager.AppSettings["ICacheClassName"];
     8         private CacheManager()
     9         {
    10 
    11         }
    12         private static ICache _cache = null;
    13 
    14         //静态构造函数且无参数,只有类第一次创建的时候初始化,而且只能调用一次
    15         static CacheManager()
    16         {
    17             Console.WriteLine("--------------------------我要创建对象了----------------------------");
    18             Assembly assembly = Assembly.Load(ICacheDllName);
    19             Type type = assembly.GetType(ICacheClassName);
    20             _cache = (ICache)Activator.CreateInstance(type);
    21         }
    22         public static ICache CreateInstance()
    23         {
    24             return _cache;
    25         }
    26     }

     三. 调用

     1   {
     2                 //发现利用单例模式,既解决了单线程内对象唯一性,也解决了多线程的对象唯一性,只创建一次
     3                 Console.WriteLine("------------------ 4.多线程测试对象创建-单例模式(开启三个线程)   ------------------------");
     4                 TaskFactory taskFactory = new TaskFactory();
     5                 List<Task> taskList = new List<Task>();
     6                 for (int i = 0; i < 3; i++)
     7                 {
     8                     Task task = taskFactory.StartNew(() =>
     9                     {
    10                         GetData3();
    11                     });
    12                     taskList.Add(task);
    13                 }
    14                 //线程等待
    15                 taskFactory.ContinueWhenAll(taskList.ToArray(), t =>
    16                 {
    17                     Console.WriteLine("全部完工了");
    18                 });
    19             }
  • 相关阅读:
    8P
    8N
    8M
    8K
    jenkins在Mac系统中默认日志、配置、启动等文件的路径
    解决Jenkins报Error fetching remote repo 'origin'的办法
    selenium的Web自动化元素点击时仍需要time.sleep等待1秒的问题
    详细配置j enokis
    mac配置启动tomcat
    mac配置启动tomcat
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/7268664.html
Copyright © 2011-2022 走看看