62,634
社区成员




//我要完成的功能如下面代码所示,请教,此功能该如何实现
Iterator it = list.iterator();
while(true){
while(it.hasNext()){
Object obj = it.next();//当我进行遍历的时候,另一程序对list添加数据,这句话就报错了,报错信息如下
//TODO 这里处理obj
it.remove();
}
sleep(20)
}
import java.util.List;
public class AddListThread implements Runnable {
private List<String> list = null;
public AddListThread(List<String> list){
this.list = list;
}
public void run() {
int i = 0;
while(true){
list.add("String"+i++);
}
}
}
import java.util.Iterator;
import java.util.List;
public class CopyOnWriteArrayListThread implements Runnable {
private List list = null;
public CopyOnWriteArrayListThread(List list){
this.list = list;
}
public void run() {
Iterator iter = list.iterator();
while(true){
while(iter.hasNext()){
String str = (String)iter.next();
System.out.println("-------->" + Thread.currentThread().getName() + " " + str);
list.remove(str);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayListTest {
public static void main(String[] args) {
List<String> list = new CopyOnWriteArrayList();
new Thread(new AddListThread(list)).start();
new Thread(new CopyOnWriteArrayListThread(list)).start();
}
}
-------->Thread-1 String0
-------->Thread-1 String1
-------->Thread-1 String2
-------->Thread-1 String3
-------->Thread-1 String4
-------->Thread-1 String5
-------->Thread-1 String6
-------->Thread-1 String7
-------->Thread-1 String8
-------->Thread-1 String9
-------->Thread-1 String10
-------->Thread-1 String11
-------->Thread-1 String12
-------->Thread-1 String13
-------->Thread-1 String14
-------->Thread-1 String15
List list = new CopyOnWriteArrayList();
for(Iterator iter = list.iterator(); iter.hasNext();) {
Object obj = iter.next();
...
if(***) {
list.remove(obj);
//it.remove();这个 remove和上面的这个是同样的效果吗?
}
}
List list = new CopyOnWriteArrayList();
for(Iterator iter = list.iterator(); iter.hasNext();) {
Object obj = iter.next();
...
if(***) {
list.remove(obj);
}
}