CopyOnWriteArrayList2Test.java
/*
* Copyright@ 2011 www.egtry.com
*/
package egtry.thread.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayList2Test {
public static void main(String[] args) {
List<String> list=new CopyOnWriteArrayList<String>();
for(int i=0; i<5; i++) {
list.add("parent "+i);
}
Iterator<String> ite=list.iterator();
String first=ite.next();
System.out.println("Main "+first);
Worker worker=new Worker(list);
worker.start();
while(ite.hasNext()) {
ranSleep(1000);
System.out.println("Main "+ite.next());
}
}
public static void ranSleep(int millis) {
try {
Thread.sleep( (int)(Math.random()*millis));
}catch (Exception e) {};
}
public static class Worker extends Thread {
private List<String> list;
public Worker(List<String> list) {
this.list=list;
}
@Override
public void run() {
for(int i=0; i<5; i++) {
list.add("child "+i);
ranSleep(100);
}
for(int i=0; i<list.size(); i++) {
System.out.println("In Child item="+list.get(i));
}
}
}
}