java concurrency of CopyOnWirteArrayList

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();
        }

    }
}

Guess you like

Origin www.cnblogs.com/JuncaiF/p/11373964.html