美文网首页Java子弹
什么是集合线程不安全,怎么解决?

什么是集合线程不安全,怎么解决?

作者: eawarfs | 来源:发表于2020-03-17 01:49 被阅读0次

    1、集合线程不安全,究竟是什么意思?

    集合的线程安全问题发生在多线程下,当一个线程写操作还未完成时,其他线程就来读这个集合的数据,从而导java.util.ConcurrentModificationException异常。

    2、怎么解决?

        2.1  Llist集合:Vector集合,加了synchronized锁,性能低,禁止使用

        2.2 使用Collections工具类的SynchronizedList()方法, 不推荐

        2.3  使用CopyOnWriteArrayList,写时复制技术

    3、写时复制

    每次写操作时(add、set)都会通过生成副本来修改,然后修改后将指针指向修改后的副本,这样就达到了读写分离。

    CopyOnWriteArrayList  add()源码

                        

    CopyOnWriteArrayList set()源码

    每次往容器内添加元素时,不直接往当前的容器内添加,而是先将当前的容器进行拷贝,然后再复制出一个新的容器,长度为原来的长度加1,然后将添加的蒜素添加到新容器的最后一个位置上,然后把原来的引用指向新的容器。

    这样的好处,写的过程中可以并发的读,而不需要加锁,属于读写分离的思想。

    相关文章

      网友评论

        本文标题:什么是集合线程不安全,怎么解决?

        本文链接:https://www.haomeiwen.com/subject/fhtkrhtx.html