HashSet遍历时保证线程安全
来源:互联网 发布:朝鲜妹子 知乎 编辑:程序博客网 时间:2024/06/02 02:55
知识前提:HashSet<T>是线程安全集合,但仅限于多个线程同时对一个HashSet<T>集合修改。
遇到的问题:多个线程同时对集合进行修改时没有遇到任何为题,但是当有一个线程在遍历的过程中对元素进行新增和删除时,此时是线程不安全的。
解决方案:其实很简单,我们只要保证遍历和集合修改时有一个互斥锁就能保证线程安全。
代码如下:
public class BlockingHashSet<T> : HashSet<T> { public new bool Add(T item) { bool result = false; lock (this) { result = base.Add(item); } return result; } public new bool Remove(T item) { bool result = false; lock (this) { result = base.Remove(item); } return result; } public IList<T> CopyToList() { lock (this) { return this.ToList<T>(); } } }看代码就明白,当我们需要安全的遍历时就先安全的复制一份新的集合去遍历。
阅读全文
0 0
- HashSet遍历时保证线程安全
- 容器 Iterator 遍历时安全的删除元素
- iOS 保证线程安全
- 如何保证线程安全?
- List遍历时陷阱
- 什么是线程安全?如何保证线程安全?
- 证明HashSet不是线程安全
- ThreadLocal保证DateFormat线程安全
- 如何保证Java线程安全
- 如何保证ArrayList线程安全
- java如何保证线程安全
- java遍历时删除元素
- list遍历时删除元素
- map遍历时,删除元素
- ArrayList遍历时不能写
- hashSet不是线程安全的验证
- 线程安全的理解和如何保证线程安全
- Servelt是否线程安全以及如何保证线程安全
- 信号的产生于处理
- 欢迎使用CSDN-markdown编辑器
- 洛谷 P1666 前缀单词
- BZOJ 1010: [HNOI2008]玩具装箱toy——斜率优化
- classpath
- HashSet遍历时保证线程安全
- 读《程序员的自我修养》记录
- hdu1509 Windows Message Queue
- (39)异常练习2:类覆盖接口方法,要考虑接口方法是否应该抛出异常,还有两个异常类应该继承哪个选取
- 关于同步另一个系统的数据
- Html的学习笔记
- Spring --AOP
- SD卡于TF卡的区别
- 我所理解的linux kernel的移植