Module java.base
Package java.util

Class ConcurrentModificationException

所有已实现的接口:
Serializable
直接已知的子类:
DirectoryIteratorException

public class ConcurrentModificationException extends RuntimeException
当检测到对象的并发修改不被允许时,可能会抛出此异常。

例如,一个线程在另一个线程正在迭代它时修改集合通常是不允许的。一般来说,在这些情况下,迭代的结果是未定义的。一些迭代器实现(包括JRE提供的所有通用集合实现的迭代器)可能会选择在检测到此行为时抛出此异常。执行此操作的迭代器被称为快速失败迭代器,因为它们会快速而干净地失败,而不是在未来的某个不确定时间冒险出现任意的、非确定性的行为。

请注意,此异常并不总是表示对象已被不同的线程同时修改。如果单个线程发出违反对象合同的方法调用序列,对象可能会抛出此异常。例如,如果一个线程在使用快速失败迭代器迭代集合时直接修改集合,迭代器将抛出此异常。

请注意,由于在未同步的并发修改的情况下,通常无法做出任何硬性保证,因此无法保证快速失败行为。快速失败操作基于尽力而为的原则抛出ConcurrentModificationException。因此,编写一个依赖此异常来保证正确性的程序是错误的:ConcurrentModificationException应仅用于检测错误。

自版本:
1.2
参见:
  • Constructor Details

    • ConcurrentModificationException

      public ConcurrentModificationException()
      构造一个没有详细消息的ConcurrentModificationException。
    • ConcurrentModificationException

      public ConcurrentModificationException(String message)
      使用指定的详细消息构造一个ConcurrentModificationException
      参数:
      message - 关于此异常的详细消息。
    • ConcurrentModificationException

      public ConcurrentModificationException(Throwable cause)
      使用指定的原因和(cause==null ? null : cause.toString())的详细消息(通常包含cause的类和详细消息)构造一个新异常。
      参数:
      cause - 原因(将由Throwable.getCause()方法保存以供以后检索)。(允许null值,并表示原因不存在或未知。)
      自版本:
      1.7
    • ConcurrentModificationException

      public ConcurrentModificationException(String message, Throwable cause)
      使用指定的详细消息和原因构造一个新异常。

      请注意,与cause关联的详细消息不会自动合并到此异常的详细消息中。

      参数:
      message - 详细消息(将由Throwable.getMessage()方法保存以供以后检索)。
      cause - 原因(将由Throwable.getCause()方法保存以供以后检索)。(允许null值,并表示原因不存在或未知。)
      自版本:
      1.7