CopyOnWirteArrayListのJavaの同時実行
CopyOnWirteArrayList実装
これは、ReentrantLockのは、設定され、追加の視認性を確保するために定義された揮発性の内部配列を使用しながら、セキュリティ操作を削除確保しました
Array.copyまたはSystem.arraycopyのことで、多くの方法がコピーオンライトであるためと呼ばれていた、操作の配列があります
コピーは、非常に低い運用効率を書きます
例
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();
}
}
}