首页 > 其他分享 >迭代器可能的报错:ConcurrentModificationException(并发修改异常)注意事项

迭代器可能的报错:ConcurrentModificationException(并发修改异常)注意事项

时间:2024-09-21 11:04:06浏览次数:8  
标签:迭代 iterator ConcurrentModificationException Iterator modCount 报错 集合

参考:
ConcurrentModificationException(并发修改异常)可能原因和解决方法
Java迭代器详解,看这一篇就够了
JAVA iterator迭代器遍历一遍后不能再遍历了吗 迭代器循环list

集合的顶层接口Collection继承Iterable接口,实现迭代器iterator()

迭代器一旦定义,不允许其他地方对其定义的集合元素,进行增加或者删除,比如:

本线程不行,其他线程当然也不行:

具体机制是:
ArrayList底层中定义了一个成员变量modCount,记录集合被修改的次数,集合每调用一次增加或删除元素的函数,modCount加1.当通过调用集合上的 iterator() 函数来创建迭代器时,会把modCount 值传递给迭代器的expectedModcount成员变量,之后每次调用集合上的hasNext()、next()、currentItem() 函数都会检查集合上modCount 和 expectedModcount 是否相等,两个值不相等,说明进行了增删,即抛出运行时异常结束程序。

增加和删除不行,修改可以:

拓展:
增强for循环可以代替Iterator迭代器,可以把它看做简化版的Iterator,和迭代器本质一样,其实它的底层实现就是Iterator迭代器,只能用于遍历集合或数组。

可以使用:CopyOnWriteArrayList

注意:仅限元素为copy了一份,个数依然是原arr的实时的个数

标签:迭代,iterator,ConcurrentModificationException,Iterator,modCount,报错,集合
From: https://www.cnblogs.com/yoyoq/p/18423708

相关文章

  • 帝国cms更新报错解决办法
    帝国CMS在更新过程中可能会遇到各种错误,例如数据库更新失败、文件权限问题、PHP版本不兼容等。下面是一些常见的解决办法:1.文件权限问题检查目录权限:确保所有必要的目录都有正确的读写权限。特别注意e/data目录及其子目录。使用FTP客户端或服务器命令行设置权限:bash ......
  • org.thymeleaf.exceptions.TemplateInputException:模板错误报错问题
    报这种模板错误就是没加注解@RestController2024-09-21T08:44:40.252+08:00ERROR13668---[nio-3000-exec-6]o.a.c.c.C.[.[.[/].[dispatcherServlet]:Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Requestprocessin......
  • vscode远程连接报错
    在使用vscode进行远程连接时出现无法与服务器连接的报错,在远程连接脚本运行无误(如图)在vscode上设置好主机名、用户名以及端口号在远程服务器上方输入连接指令在连接时选择“Linux”,却在输入密码前显示无法连接到服务器。而此时windows终端脚本运行出现乱码,考虑是脚本文......
  • node.js版本过高vue项目启动报错
    node.js版本过高会导致vue项目启动报错。要解决此问题,请将node.js版本降级到与vue项目兼容的版本:1.检查项目要求确定所需版本。2.查看当前版本运行node-v。3.使用nvm降级:nvminstall[版本]。4.使用npx运行npm命令:npx-pnode@[版本]npmrun[命令]。5.更新......
  • ResizeObserver loop completed with undelivered notifications. 报错
    js使用ResizeObserver时报错,代码实现逻辑如下:functionobserveVideoDom(width:number,height:number){constvideoDom=document.getElementById('videoDom')if(!videoDom)returnif(window.ResizeObserver){//ResizeObserver在iOS13.4及......
  • 视频存储EasyCVR视频监控汇聚管理平台设备录像下载报错404是什么原因?
    EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。该平台不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能,还支持多种主流标准协议,如GB28181、RTSP/Onvif、RTMP、部标JT808、GA/T1400协议等,以及支持厂家的私有协议......
  • 云服务器异常报错类型及处理方法
     在现代互联网时代,云服务器已经成为了企业和个人用户的首选解决方案。一方面,云服务器提供了灵活、可扩展的计算资源,另一方面,其治理和维护也相对复杂。当云服务器出现异常报错时,如何有效地解决问题显得尤为重要。本文将就云服务器主机异常报错的常见类型、原因分析以及解决方案进行......
  • 如何解决帝国CMS刷新栏目报错?
    解决帝国CMS刷新栏目报错的问题,可以遵循以下步骤进行排查和解决:了解帝国CMS栏目刷新原理:刷新栏目页通常涉及从数据库中获取数据,并将其转换为静态HTML页面或动态生成页面。这一过程依赖于正确的数据库连接、有效的模板文件以及适当的服务器配置。确认错误类型:查看错误......
  • 帝国CMS报错Deprecated: Function get_magic_quotes
    当使用帝国CMS时遇到“Deprecated:Functionget_magic_quotes”这类报错,通常是因为PHP版本升级后,某些旧的函数被弃用。get_magic_quotes_gpc() 函数在PHP5.4中已被弃用,并在PHP7.0中被移除。原因分析PHP版本升级:如果你的服务器从较旧的PHP版本(如5.3或更低)升级到了PHP7.......
  • R语言安装graph包报错:package graph is not available for this version of R
    我的R语言版本是4.0.2,安装graph包的时候出现如下报错尝试过换源都无法下载后来尝试在google想搜索graph包的官网,搜出来:https://cran.r-project.org/web/packages/graph/index.html 应该是graph包被CRAN更新了,现在已不在使用根据它的提示,进入链接:https://www.bioconductor.or......