尚学堂百战程序员:Java并发修改异常

尚学堂百战程序员:Java并发修改异常通过查看JDK的API我们可以得知,并发修改异常的出现的原因是:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

大家好,欢迎来到IT知识分享网。

什么时候会产生并发修改异常

并发的意思是同时发生,那么其实并发修改的字面意思就是同时修改,通过查看JDK的API我们可以得知,并发修改异常的出现的原因是:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

一个常见的场景就是:当我们在对集合进行迭代操作的时候,如果同时对集合对象中的元素进行某些操作,则容易导致并发修改异常的产生。

尚学堂百战程序员:Java并发修改异常

Java开发中Exception in thread “main” java.util.ConcurrentModificationException, 这是一个并发修改异常,主要原因是迭代器遍历元素的时候,通过集合是不能修改元素的。

其实ConcurrentModificationException异常的抛出是由于checkForComodification(AbstractList类中)方法的调用引起的

private void checkForComodification() {

if (this.modCount != l.modCount)

throw new ConcurrentModificationException();

}

而checkForComodification方法的调用发生在Iterator相关api方法中,

在调用list的iterator方法会创建一个Itr对象。

迭代器迭代元素,迭代器修改元素.

特点:新添加的元素是跟在刚才迭代的元素后面的。

代码如下:

public class ListIteratorDemo {

public static void main(String[] args) {

// 创建List集合对象

List list = new ArrayList();

// 添加元素

list.add(“hello”);

list.add(“world”);

list.add(“java”);

// 方式1:迭代器迭代元素,迭代器修改元素

// 而Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator

ListIterator lit = list.listIterator();

while (lit.hasNext()) {

String s = (String) lit.next();

if (“world”.equals(s)) {

lit.add(“javaee”);

}

}

}

}

“我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。”

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/13159.html

(0)
上一篇 2024-03-08 07:00
下一篇 2024-03-08 07:26

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信