首页 新闻 会员 周边 捐助

arraylist同步的问题

0
[已关闭问题]
我的一个线程往一个arraylist添加数据<BR>一个线程从arraylist移除数据<BR><BR>1.如何保证添加数据的过程不被阻塞
问题补充: 什么时候会发生阻塞? 一个线程从arraylist移除数据 时会锁定arraylist 此时就不能添加数据了吧
阿勇的主页 阿勇 | 菜鸟二级 | 园豆:210
提问于:2007-11-20 09:55
< >
分享
其他回答(2)
0
什么时候会发生阻塞? 多线程安全的ArrayList会不会避免这个问题?
Anders Cui | 园豆:1570 (小虾三级) | 2007-11-20 13:41
0
这个不需要考虑把。他自己会排队来等待前一个操作完成的。
暗香浮动 | 园豆:361 (菜鸟二级) | 2007-11-20 15:31
0
在多个线程访问同一个变量的时候,最好使用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); } } } } 在这里使用了一种叫做双验证的方法来保证多个线程对静态变量访问时的数据同步。还有就是被锁定的对象最好是除了当前的这个类以外不能被其他对象使用,否则就会由于同一个对象被多处锁定而造成循环等待的问题。
Edward.Net | 园豆:215 (菜鸟二级) | 2007-11-21 17:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册