因此,从上面代码可以看到,使用lock(syncRoot)也无法出现的多线程冲突问题。
2、使用ConcurrentDictionary替代Hashtable
ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单线程版本(线程不安全的,Queue,Stack,Dictionary)我们一定不会陌生。ConcurrentDictionary<TKey, TValue> 可由多个线程同时访问,且线程安全,用法同Dictionary很多相同,但是多了一些方法。ConcurrentDictionary 属于System.Collections.Concurrent 命名空间。
System.Collections.Concurrent 命名空间提供多个线程安全集合类。当有多个线程并发访问集合时,应使用这些类代替 System.Collections 和 System.Collections.Generic 命名空间中的对应类型。
ConcurrentDictionary这个类提供了下面几个方法,用于对集合的处理
1 2 |
|
使用ConcurrentDictionary来替代Hashtable,我们来看看BLLFactory的类的实现代码如下所示。
1 2 3 4 5 6 |
|
我们可以看到代码简化了很多,而且使用前面的多线程测试代码,也顺利获取数据,不会出现异常了。
运行代码可以顺利实现,不会出现之前使用Hashtable出现的多线程访问异常了。
以上就是引入ConcurrentDictionary替代Hashtable对多线程的对象缓存处理,能够顺利解决问题的时候,发现其访问效率也是较之前有所提高,一举两得。
以上就是使用ConcurrentDictionary多线程同步字典集合实例详解的详细内容!
相关阅读 >>
浅谈c# 之 hashtable 与 dictionary的代码实例
代码分析:在.net core中使用ref和span<t>提高程序性能
使用 vscode 编写 .net core 项目的实例教程
使用ConcurrentDictionary多线程同步字典集合实例详解
更多相关阅读请进入《ConcurrentDictionary》频道 >>
C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。