Closed smile921 closed 7 years ago
/**
*
*/
package horse.wtf.nzyme.concurrent;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author frere
*
*/
public class CopyOnWriteArrayListDemo {
public void run() {
final int NUM =10;
List<String> lst = new ArrayList<String>(NUM);
lst = new CopyOnWriteArrayList<String>( );
for(int i=0;i<NUM;i++) {
lst.add(i, "main_"+i);
}
ExecutorService es = Executors.newFixedThreadPool(4);
for(int i=0;i<NUM;i++) {
es.execute(new ReadListThread(lst));
es.execute(new WriteListThread(lst, i));
}
es.shutdown();
}
/**
* @param args
*/
public static void main(String[] args) {
new CopyOnWriteArrayListDemo().run();
}
private static class ReadListThread implements Runnable {
private List<String> lst ;
public ReadListThread(List<String> list) {
this.lst = list;
}
@Override
public void run() {
for(String e : lst) {
System.out.print(e+", ");
}
System.out.println("");
}
}// class ReadListThread end
private static class WriteListThread implements Runnable {
private List<String> lst;
int index;
public WriteListThread(List<String> list,int index) {
this.lst = list;
this.index = index;
}
public void run() {
this.lst.remove(index);
this.lst.add(index, "write_"+index);
}
}
}
关于 CopyOnWriteArrayList 需要仔细研究一番