我的一个线程往一个arraylist添加数据<BR>一个线程从arraylist移除数据<BR><BR>1.如何保证添加数据的过程不被阻塞问题补充: 什么时候会发生阻塞? 一个线程从arraylist移除数据 时会锁定arraylist 此时就不能添加数据了吧
2 回答
墨色风雨
TA贡献1853条经验 获得超6个赞
在多个线程访问同一个变量的时候,最好使用lock关键字进行锁定。例如 private static object synRoot = new Object(); private static ArrayList arrayList = new ArrayList(); public static void AddItem(object value) { if(!arrayList.Contains(value)) { lock(synRoot) { if(!arrayList.Contains(value)) { arrayList.Add(value); } } } } 在这里使用了一种叫做双验证的方法来保证多个线程对静态变量访问时的数据同步。还有就是被锁定的对象最好是除了当前的这个类以外不能被其他对象使用,否则就会由于同一个对象被多处锁定而造成循环等待的问题。
- 2 回答
- 0 关注
- 710 浏览
添加回答
举报
0/150
提交
取消