`
darkjune
  • 浏览: 308672 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java Concurrent Modication Exception 解决

    博客分类:
  • java
阅读更多
最近自己用UnitTest测出了自己犯的比较隐蔽的错误, 就是在两层for 循环中, 在最里层的循环里面动态的改了外层循环里面的数据,导致java的循环计数器出错, 抛出ConcurrentModificationException. 这个错误在系统中不会出现, 只有在UnitTest的时候才出现.
片段如下
for (PersonTO personTO : accountTO.getPersons()) {
  for (ExpenseTO expTO : personTO.getExpenses()) {
    if (expTO.getPersonalFinanceId()==null){
      personTO.getExpenses().remove(expTO);
    }
  }
}

这里personTO里面expense的计数器在内循环被破坏了, 计数器和实际数据数量不符, 这个问题不大容易测出来,有很大的隐患. 可以做如下修改, 用倒序for循环:
for (PersonTO personTO : accountTO.getPersons()) {    
  for(int i=personTO.getExpenses().size()-1;i>=0;i--){
    	ExpenseTO eto=personTO.getExpenses().get(i);
    	  if(eto.getPersonalFinanceId()==null){
    		personTO.getExpenses().remove(i);
          }
  }
}

分享到:
评论

相关推荐

    java concurrent 精简源码

    本资源“java concurrent 精简源码”着重关注Java并发库(java.util.concurrent)的核心概念,包括阻塞队列和线程管理。下面将详细阐述这些知识点。 1. **Java并发库(java.util.concurrent)** Java并发库是Java ...

    Java Concurrent in practice (animated)

    Java Concurrent in practice (animated)

    Java Concurrent Programming

    在Java并发编程中,同步是解决多线程之间资源竞争的关键技术之一。下面将详细介绍同步的基本概念、synchronized关键字的使用以及原子数据和监控机制等内容。 ##### 1.1 概述 多线程程序设计相比单线程程序设计更为...

    java concurrent 包 详细解析

    Java并发包(java.concurrent)是Java平台中处理多线程编程的核心工具包,它提供了丰富的类和接口,使得开发者能够高效、安全地编写多线程程序。这个包的设计目标是提高并发性能,减少同步代码的复杂性,并提供高级...

    JAVA的CONCURRENT用法详解.pdf

    JAVA的CONCURRENT用法详解.pdf

    使用java concurrent调用xmlp api生成pdf

    这里我们关注的是如何使用`java.concurrent`包中的工具和XML Processing API(通常指的是JAXB或DOM4J等处理XML的库)来高效地生成PDF。下面将详细解释这个过程以及涉及的相关知识点。 首先,`java.concurrent`包是...

    java concurrent包分类结构图

    java concurrent包分类结构图

    Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException)

    "java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError" 是一个典型的错误提示,它表明在并发执行过程中遇到了内存不足的问题。下面我们将深入探讨这个问题的原因、影响以及如何解决。 内存溢出...

    java concurrent source code

    资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 封底 Java多线程无处不在,...

    java concurrent program的实现

    EBS java concurrent program的实现

    Java Concurrent处理并发需求

    ### Java Concurrent处理并发需求 #### 一、Java并发基础与Concurrent API介绍 在现代软件开发中,尤其是在服务器端应用中,对并发处理的需求日益增长。为了满足这种需求,Java平台提供了一系列强大的工具和API来...

    java并发工具包 java.util.concurrent中文版pdf

    ### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...

    java concurrent in practive

    《Java并发编程实战》还会讨论`java.util.concurrent`包中的高级并发工具,如`ExecutorService`和`Future`,它们可以方便地管理和控制线程池,提高系统的并行处理能力。`CountDownLatch`、`CyclicBarrier`和`...

    JAVA Concurrent Programming

    Java 1.5引入了`java.util.concurrent`包,包含了一系列的并发工具类,如线程池、阻塞队列、并发集合等。这些工具旨在提高并发性能并简化编程模型。例如,`ExecutorService`和`ThreadPoolExecutor`提供了线程池管理...

    java并发工具包 java.util.concurrent中文版用户指南pdf

    1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...

    java同步大杀器concurrent 包

    java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大杀器concurrent 包java同步大...

    java_util_concurrent_中文用户使用手册@微信公众号-架构探险之道.zip

    JUC使用指导手册 http://tutorials.jenkov.com/java-util-concurrent/blockingqueue.html 中文译文

    面试-Java一些常见面试题+题解之多线程开发-JavaConcurrent.zip

    JavaConcurrent是Java平台提供的高级并发API,它使得多线程编程更加高效和安全。本资料集合了Java面试中与多线程相关的常见问题及解答,旨在帮助求职者充分准备这一关键领域的知识。 1. **线程的概念与创建** - ...

    动画学习 java.util.concurrent并发工具包

    如何启动:以win7系统为例,最好jdk8 1.打开cmd,cd到jdk的path,本机是:cd C:\Java\jdk6\bin ...java -cp D:\javaConcurrentAnimated.jar vgrazi.concurrent.samples.launcher.ConcurrentExampleLauncher

    解决axis2-CodegenWizardPluginBUG- java.lang.reflect.InvocationTargetException

    标题中的“解决axis2-CodegenWizardPluginBUG- java.lang.reflect.InvocationTargetException”指的是在使用Apache Axis2的CodegenWizardPlugin工具时遇到的一个错误。这个工具是Axis2框架的一部分,用于自动生成...

Global site tag (gtag.js) - Google Analytics