C/C++教程

JUC练习5——CopyOnWriteArrayList解决List下的同步安全问题

本文主要是介绍JUC练习5——CopyOnWriteArrayList解决List下的同步安全问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

public class JucTest3
{
    public static void main(String[] args) {
        /**
         * 在多线程下ArrayList不安全会发生同步修改异常ConcurrentModificationException
         * 原因:
         * 解决方式:
         *      1,使用Vector代替ArrayList,底层是使用synchronized来实现同步的,效率比较低
         *      2,使用工具类将其转成安全的:List<String> list = Collections.synchronizedList(new ArrayList<>());
         *      3,使用JUC下的CopyOnWriteArrayList:List<String> list = new CopyOnWriteArrayList<>();,使用lock实现同步,效率高
         *      它会在写入的时候,避免多线程下同时写入,将其它线程写入的数据覆盖,所以如果该线程想要写入数据时,它只能将数据复制一份出来
         *      在复制的数据上面做出修改后,再同步会原来的数据中
         */
        List<String> list = new CopyOnWriteArrayList<>();
        for(int i=0;i<20;i++)
        {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,5));
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}

  

这篇关于JUC练习5——CopyOnWriteArrayList解决List下的同步安全问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!