java并发之CopyOnWirteArrayList

Posted juncaif

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
        

    

以上是关于java并发之CopyOnWirteArrayList的主要内容,如果未能解决你的问题,请参考以下文章

Java并发编程:并发容器之ConcurrentHashMap(转载)

Java并发编程:并发容器之ConcurrentHashMap

Java并发编程:并发容器之CopyOnWriteArrayList

Java并发--并发容器之ConcurrentHashMap

java并发之CopyOnWriteArraySet

Java并发之CountDownLatch的使用