我是靠谱客的博主 有魅力向日葵,最近开发中收集的这篇文章主要介绍ArrayList迭代器并发修改异常,java基础,copyonwritelist,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

list数组元素计数器modcount 在iterator初始化的时候 赋值给expect 预计 count

在迭代器的next方法中会去检查是否修改

如果被修改了就回去跑出并发修改异常

modcount 在add方法的时候回去自增

简单来说list中的并发修改异常就是在多线程情况下,对list的迭代器进行遍历的时候操作原list对象,这个时候就会出现concurrentmodifiException

-----------------------------------------------------

今天看了狂神说的那个arraylist线程不安全的视频里面说的不太详细

加了sout 就会出现这个异常

原因在于

因为我们的list底层输数组,数组没有直接的tostring方法,只能通过便利将字符串拼接出来,拼接成

这样的一个字符串,每个线程都调用了tostring方法,就可能会出现线程安全问题

 

Arraylist会出现

1,并发修改异常

2,线程安全

并发修改异常刚刚我们说了,简单的说一下第二个线程安全问题

分析:结果应该是10000的,但是由于线程安全问题,在add这个方法调用的时候出现了索引位置的数据被覆盖的问题

因为咱们的list底层存储数据的结构是数组,总所周知arraylist是一个线程不安全的方法,在add和upadte delete的时候肯定都 不是同步的

就是这里,会出现索引位置的数据被重复赋值的问题,说人话就是被覆盖了,多个线程同时在执行 add方法的时候就会出现这个问题。

到这里衍生出另一个问题,怎么解决这些由于线程不安全出现的问题呢?

1:同步方法  -> vector

2: 集合工具类 collections 让其为我们创建一个线程安全的Arraylist ,非同步方法 而是使用lock锁

3:juc发病变编程 java.util.concurrent 包下的,CopyonwriteArraylisrt类 为我们创建一个线程安全的Arraylist

接下来主要讲juc并发变成下的 CopyonwriteArraylisrt

最后

以上就是有魅力向日葵为你收集整理的ArrayList迭代器并发修改异常,java基础,copyonwritelist的全部内容,希望文章能够帮你解决ArrayList迭代器并发修改异常,java基础,copyonwritelist所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部