基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美
2015-03-17 11:53
246 查看
回到目录
ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单线程版本(线程不安全的,Queue,Stack,Dictionary)我们一定不会陌生,可以说是经常用到,一个类的实例里,有个属性是个字典,我们不加考虑的会用Dictionary,而当这个属性被提升为static静态的(类级别的)时候,我们就要考虑它的线程安全性了,因为它有可能被多个线程同时访问,当然,如果这个对象是只读的,也无所谓线程安全,但如果这个属性是可以被写的,那就需要把它加锁了,这代码我们经常看到:
看吧,你的代码会有很我的lock块,不说它是否漂亮,但从性能上看,就不能被接收,我们知道,lock会把其它线程锁在外面,无论是读还是写,都会被锁,性能非常并,微软自己也看到了它的不足,所以才推出了System.Collections.Concurrent集合,在这个命名空间里,开发了一批线程安全的对象,当然内核也类似于lock机制,但小微自己一定是做了不少优化的,这是我们能肯定的,呵呵.
如果你之前的方法用的都是Dicationary的,那修改也方便,只要利用适配器模式,把它加工一下即可
怎么样,没有lock块的代码漂亮了许多吧!
回到目录
ConcurrentDictionary是.net4.0推出的一套线程安全集合里的其中一个,和它一起被发行的还有ConcurrentStack,ConcurrentQueue等类型,它们的单线程版本(线程不安全的,Queue,Stack,Dictionary)我们一定不会陌生,可以说是经常用到,一个类的实例里,有个属性是个字典,我们不加考虑的会用Dictionary,而当这个属性被提升为static静态的(类级别的)时候,我们就要考虑它的线程安全性了,因为它有可能被多个线程同时访问,当然,如果这个对象是只读的,也无所谓线程安全,但如果这个属性是可以被写的,那就需要把它加锁了,这代码我们经常看到:
lock(obj){ _dic[key]=value; }
看吧,你的代码会有很我的lock块,不说它是否漂亮,但从性能上看,就不能被接收,我们知道,lock会把其它线程锁在外面,无论是读还是写,都会被锁,性能非常并,微软自己也看到了它的不足,所以才推出了System.Collections.Concurrent集合,在这个命名空间里,开发了一批线程安全的对象,当然内核也类似于lock机制,但小微自己一定是做了不少优化的,这是我们能肯定的,呵呵.
如果你之前的方法用的都是Dicationary的,那修改也方便,只要利用适配器模式,把它加工一下即可
private readonly static ConcurrentDictionary<string, T> _dic; #region IDictionary<string,ResultType> 成员 public void Add(string key, T value) { _dic.TryAdd(key, value); } public bool ContainsKey(string key) { return _dic.ContainsKey(key); } public ICollection<string> Keys { get { return _dic.Keys; } } public bool Remove(string key) { T val; return _dic.TryRemove(key, out val); } public bool TryGetValue(string key, out T value) { return _dic.TryGetValue(key, out value); } public ICollection<T> Values { get { return _dic.Values; } } public T this[string key] { get { return _dic[key]; } set { _dic[key] = value; } } #endregion
怎么样,没有lock块的代码漂亮了许多吧!
回到目录
相关文章推荐
- [代码笔记 ] python 之 多线程代码笔记_基础版(函数式+封装类式)
- ConcurrentDictionary让你的多线程代码更优美
- 第十一回 基础才是重中之重~Conditional特性使代码根据条件在debug或者release模式中执行
- 基础才是重中之重~老赵写的CodeTimer是代码性能测试的利器
- Java基础(四):妙用Java8中String.join方法,让我们的代码更优美
- 基础才是重中之重~Conditional特性使代码根据条件在debug或者release模式中执行
- 第十五回 基础才是重中之重~老赵写的CodeTimer是代码性能测试的利器
- 第一行代码 读笔⑦ (Service 多线程基础)
- java多线程基础知识:如何编写线程安全代码
- Java_基础—网络编程(TCP协议代码及其优化和服务器多线程优化)
- java基础之多线程复制文件代码演示
- 基础才是重中之重~用好“逻辑与”和“逻辑或”,可以让你的程序更优美!
- 第八回 基础才是重中之重~用好“逻辑与”和“逻辑或”,可以让你的程序更优美!
- 德是基础,才是标准(7.24)
- bat中的“多线程”处理代码
- 黑马程序员——Java基础---多线程
- Java基础之十一:多线程
- 网络编程基础--多线程
- jstl基础代码