java並發之CopyOnWirteArrayList


java並發之CopyOnWirteArrayList

CopyOnWirteArrayList的實現

它用了ReentrantLock保證了add,set,remove操作的安全,同時使用volatile定義內部數組保證了可見性,
之所以叫CopyOnWrite就是因為很多方法都是通過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();
        }

    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM