arraylist同步的问题

我的一个线程往一个arraylist添加数据<BR>一个线程从arraylist移除数据<BR><BR>1.如何保证添加数据的过程不被阻塞


问题补充: 什么时候会发生阻塞? 一个线程从arraylist移除数据 时会锁定arraylist 此时就不能添加数据了吧


慕慕森
浏览 711回答 2
2回答

墨色风雨

在多个线程访问同一个变量的时候,最好使用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); } } } } 在这里使用了一种叫做双验证的方法来保证多个线程对静态变量访问时的数据同步。还有就是被锁定的对象最好是除了当前的这个类以外不能被其他对象使用,否则就会由于同一个对象被多处锁定而造成循环等待的问题。

蝴蝶刀刀

这个不需要考虑把。他自己会排队来等待前一个操作完成的。
打开App,查看更多内容
随时随地看视频慕课网APP