我的程序有很多threads
,可以随时for each throught an arraylist
item
,arraylist
中的任何item
都可以随时删除,我该怎么做当其他arraylist
使用arraylist
时,阻止从thread
移除a1 <- c(1,2,3,76,43,8,4,5,1)
a2 <- c(1,1,1,2,2,2, 3 , 3, 3) #three individuals
A <- data.frame(a1,a2)
?
我真的很感激一些解释或代码示例。
答案 0 :(得分:4)
请勿使用ArrayList
,而是使用合适的类,例如CopyOnWriteArrayList
。但是,如果有很多修改(和大列表),它将影响性能。
答案 1 :(得分:1)
使用ArrayList
- CopyOnWriteArrayList
答案 2 :(得分:1)
如果多个线程同时访问ArrayList
实例,并且至少有一个线程在结构上修改了列表,则必须在外部进行同步。 (结构修改是添加或删除一个或多个元素的任何操作,或显式调整后备数组的大小;仅设置元素的值不是结构修改。)这通常通过同步一些自然封装的对象来实现。名单。如果不存在此类对象,则应使用Collections.synchronizedList
方法“包装”该列表。这最好在创建时完成,以防止意外地不同步访问列表:
List list = Collections.synchronizedList(new ArrayList(...));
答案 3 :(得分:1)
使用Collections.synchronizedList()获取列表的线程安全版本:
List<T> list = Collections.synchronizedList(yourArray);
然后在遍历列表的同时使用迭代器并在迭代器上调用remove()方法来删除项目:
Iterator<T> it = list.iterator();
while(it.hasNext()) {
if(condition) {
it.remove();
}
}