java concurrency of CopyOnWirteArrayList
CopyOnWirteArrayList implementation
It took ReentrantLock ensures add, set, remove the security operation, while using volatile internal array defined to ensure the visibility
was called because CopyOnWrite are many ways by Array.copy or System.arraycopy, there is an array of operations
copy, write so low operational efficiency
example
package javalearn.javabase.concurrent;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
@Slf4j
public class CopyWriteOnArrayListTest {
private static int capcity = 5;
private static List<String> list = new CopyOnWriteArrayList<String>();
//private static List<String> list = new ArrayList<>();会抛出异常ConcurrentModificationException
public static void main(String[] args) {
InnerThread t1 = new InnerThread();
InnerThread t2 =new InnerThread();
t1.start();
t2.start();
}
static class InnerThread extends Thread {
@Override
public void run() {
for (int i = 0; i < capcity; i++) {
list.add(String.valueOf(i));
iteratorList(list);
}
}
}
public static void iteratorList(List list){
Iterator iterator =list.iterator();
while(iterator.hasNext()){
iterator.next();
}
}
}