java.util.ConcurrentModificationException异常分析及解决

问题描述

有一个RecycleView视图组件,数据变更得时候进行了增加和删除操作,频繁触发 增加、删除数据得操作,低概率出现此问题,代码片段无法展示,可以语言描述一下代码片段

  1. recycleview使用了adapter来展示数据
  2. adapter初始化子view需要一个list
  3. list可能会调用remove、add操作,频繁调用会触发ConcurrentModificationException异常

下面是错误堆栈信息

	2022-04-25 10:40:27.082 14788-14788/com.xx E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.xx, PID: 14788java.util.ConcurrentModificationExceptionat java.util.ArrayList$SubList.size(ArrayList.java:1057)at com.chad.library.adapter.base.BaseQuickAdapter.getItemCount(BaseQuickAdapter.java:698)at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3722)at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:3219)at android.view.View.measure(View.java:22238)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6682)at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)at android.view.View.measure(View.java:22238)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6682)at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1167)at android.widget.LinearLayout.onMeasure(LinearLayout.java:687)at android.view.View.measure(View.java:22238)at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)at android.view.View.measure(View.java:22238)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6682)at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:141)at android.view.View.measure(View.java:22238)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6682)at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)at android.view.View.measure(View.java:22238)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6682)at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)at android.view.View.measure(View.java:22238)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6682)at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)at android.view.View.measure(View.java:22238)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6682)at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)at com.android.internal.policy.DecorView.onMeasure(DecorView.java:725)at android.view.View.measure(View.java:22238)at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2523)at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1550)at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1818)at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1438)at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6982)at android.view.Choreographer$CallbackRecord.run(Choreographer.java:916)at android.view.Choreographer.doCallbacks(Choreographer.java:728)at android.view.Choreographer.doFrame(Choreographer.java:660)at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:902)at android.os.Handler.handleCallback(Handler.java:790)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:164)at android.app.ActivityThread.main(ActivityThread.java:6548)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)

解决方案:

  1. 在使用iterator迭代的时候使用synchronized或者Lock进行同步
  2. 使用并发容器CopyOnWriteArrayList代替ArrayList和Vector。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot集成腾讯云敏感词校验API流程

1.pom.xml中引入腾讯云jar配置信息 <dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>4.0.11</version> </dependency> 2.application.yaml中添加配置 tencent…

2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版

简介&#xff1a; 2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版 下载地址 https://www.kuaiyuanya.com/product/article/index/id/33.html 图片&#xff1a;

Microsoft.NET 框架程序设计 —— 基元类型、引用类型与值类型

本文讨论.NET 框架开发人员经常遇到的各种数据类型。熟悉这些类型的不同行为对于一个开发人员来说至关重要。当我刚开始接触.NET框架时,就没有完全理解基元类型、引用类型和值类型之间的一些差别。这种模糊的认识甚至无意间导致了一些难以査找的bug以及性能问题。我希望通过本…

【QT】实时语言切换

前言&#xff1a;一个完整的软件开发通常需要支持多种语言&#xff0c;本文主要讲述实时语言切换开发时的相关解决方案。 1. 制作字库文件 添加标识 在需要被翻译的字符串前面标识tr&#xff0c;如QString str&#xff1d;tr(“hello,world!”); &#xff0c;这很重要&#xf…

使用 Django Rest Framework 构建强大的 Web API

文章目录 安装 Django Rest Framework创建序列化器创建视图和 URL 路由配置认证和权限测试 API Django Rest Framework&#xff08;DRF&#xff09;是一个强大的工具&#xff0c;用于在 Django Web 框架中构建灵活且功能丰富的 Web API。它提供了许多功能&#xff0c;包括序列化…

ubuntu22.04 kubeadm安装k8s集群(从零到有)

ubuntu kubeadm安装k8s集群 前言一、初始化所有ubuntu服务器二、安装kubeadm三、kubeadm初始化节点、加入集群四、安装kubesphere1、下载yaml文件2、运行apply报错3、安装完成。4、忘记密码,强制修改5、Kubesphere其他组件安装前言 k8s 三master 三node所有节点hosts文件添加…

android radiongroup应用举例

android radiongroup应用举例 在 Android 中&#xff0c;RadioGroup 是一个特殊的布局容器&#xff0c;用于包含多个 RadioButton 控件。这些 RadioButton 通常一起使用&#xff0c;以便用户可以从一组选项中选择一个。当用户选择其中一个 RadioButton 时&#xff0c;其他 Rad…

(六)DockerCompose安装与配置

DockerCompose简介 Compose 项目是 Docker 官方的开源项目&#xff0c;负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中&#xff0c;经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现…

线性回归分析

线性回归分析是统计学和数据分析中常用的一种工具&#xff0c;它研究的是因变量与自变量之间的线性关系。在实际应用中&#xff0c;线性回归可以帮助我们理解变量之间的关联&#xff0c;预测未来的趋势&#xff0c;以及进行决策支持。在本选题中&#xff0c;我们将深入探讨线性…

protobuf学习

学习了下protobuf这个工具&#xff0c;可以用来序列化数据结构&#xff0c;而且效率很高&#xff0c;数据可以压缩的更小。 记录下&#xff0c;我这里主要在C#里使用&#xff0c;从NuGet程序包安装以下两个 安装好后可以在该程序目录找到 packages\Google.Protobuf.Tools.3.26.…

在windows中使用wsl下的unbuntu环境

1 unbuntu下载编译环境 编译环境安装命令&#xff1a; sudo apt install gdb sudo apt install gcc sudo apt install g 2 使用vscode正常打开项目&#xff0c;在window中打开的项目&#xff08;官方推荐将项目放在linux中的home目录&#xff09; 但在windows中也可以使用&a…

汐鹤Key码查询,网站授权系统源码

汐鹤Key码查询和网站授权系统源码主要用于特殊虚拟物品销售商家。 下 载 地 址 &#xff1a; runruncode.com/php/19770.html 附带插件功能&#xff08;网站授权&#xff09;&#xff0c;但目前开发内容较少&#xff0c;请谅解&#xff01;同时&#xff0c;代码优化空间很大…

【软考】设计模式之装饰器模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.动态地给一个对象添加一些额外的职责。2.Decorator Pattern。3.就增加功能而言&#xff0c;装饰器模式比生成子类更加灵活。4.一种在不改变现有对象结构的情况下&#xff0c;动态地给对…

Office VBA基础 学习笔记

Office VBA基础 一、引言 VBA&#xff08;Visual Basic for Applications&#xff09;作为office内置的一种编程语言&#xff0c;在自动化办公、数据处理、表单开发等方面发挥着越来越重要的作用。VBA不仅允许用户定制Office应用程序的行为&#xff0c;还能与各种数据库、Web…

垃圾溢满堆放识别检测

垃圾溢满堆放识别检测系统的核心技术是基于YOLO深度学习模型&#xff0c;垃圾溢满堆放识别检测系统能够在监控画面中快速识别出垃圾箱外部的垃圾堆放情况。系统经过大量的训练和优化&#xff0c;能够识别出各种垃圾的特征&#xff0c;并能够准确判断是否溢满堆放。垃圾溢满堆放…

【MySQL精通之路】InnoDB(9)-表和页压缩(1)-表压缩

目录 1.表压缩概述 2.创建压缩表 2.1 在FPT表空间中创建压缩表 2.2 在通用表空间中创建压缩表 2.3 压缩表的限制 3.优化InnoDB表的压缩 4.运行时监控InnoDB表压缩 5.InnoDB表的压缩工作原理 5.1 压缩算法 5.2 InnoDB数据存储和压缩 5.3 B树页面的压缩 5.4 压缩BLOB…

Android HAL Service开发总结

Android HAL Service开发总结&#xff1a; 1.需要针对自己的hwservice编写init.rc启动脚本 vendor.device.xxx_hwfunservice-1.1.rc service vendor.device.xxx_hwfunservice-1.1 /vendor/bin/hw/vendor.device.xxx_hwfun1.1-serviceclass haluser systemgroup systemseten…

鸿蒙OS开发:【一次开发,多端部署】(多设备自适应能力)实例

多设备自适应能力 介绍 此Demo展示在JS中的多设备自适应能力&#xff0c;包括资源限定词、原子布局和响应式布局。 效果预览 使用说明 1.本示例中的资源限定词和响应式布局针对常见设备类型做了适配&#xff0c;可以在预览器中开启"Multi-profile preview"进行多…

【Day7:JAVA面向对象的初级使用】

目录 1、类和对象1.1 类的介绍1.2 类和对象的关系1.3 类的组成 2、对象内存图2.1 单个对象内存图2.2 两个对象内存图2.3 两个引用指向相同内存图 3、成员变量和局部变量3.1 成员变量和局部变量的区别 4、this关键字4.1 this可以解决的问题4.2 this介绍4.3 this内存图4.4 this总…

MapReduce基础实战

**MapReduce基础实战** 一、引言 随着大数据时代的到来&#xff0c;数据量的快速增长对数据处理能力提出了更高的要求。MapReduce作为一种分布式计算框架&#xff0c;以其高效、容错和易于编程的特点&#xff0c;成为了处理大规模数据集的重要工具。本文将介绍MapReduce的基本…