java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.util.ConcurrentModificationException
- 所有已实现的接口:
-
Serializable
- 直接已知的子类:
-
DirectoryIteratorException
当检测到对象的并发修改不被允许时,可能会抛出此异常。
例如,一个线程在另一个线程正在迭代它时修改集合通常是不允许的。一般来说,在这些情况下,迭代的结果是未定义的。一些迭代器实现(包括JRE提供的所有通用集合实现的迭代器)可能会选择在检测到此行为时抛出此异常。执行此操作的迭代器被称为快速失败迭代器,因为它们会快速而干净地失败,而不是在未来的某个不确定时间冒险出现任意的、非确定性的行为。
请注意,此异常并不总是表示对象已被不同的线程同时修改。如果单个线程发出违反对象合同的方法调用序列,对象可能会抛出此异常。例如,如果一个线程在使用快速失败迭代器迭代集合时直接修改集合,迭代器将抛出此异常。
请注意,由于在未同步的并发修改的情况下,通常无法做出任何硬性保证,因此无法保证快速失败行为。快速失败操作基于尽力而为的原则抛出ConcurrentModificationException
。因此,编写一个依赖此异常来保证正确性的程序是错误的:ConcurrentModificationException
应仅用于检测错误。
- 自版本:
- 1.2
- 参见:
-
Constructor Summary
ConstructorDescription构造一个没有详细消息的ConcurrentModificationException。ConcurrentModificationException
(String message) 使用指定的详细消息构造一个ConcurrentModificationException
。ConcurrentModificationException
(String message, Throwable cause) 使用指定的详细消息和原因构造一个新异常。使用指定的原因和(cause==null ? null : cause.toString())
的详细消息(通常包含cause
的类和详细消息)构造一个新异常。 -
Method Summary
Methods declared in class java.lang.Throwable
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
-
Constructor Details
-
ConcurrentModificationException
public ConcurrentModificationException()构造一个没有详细消息的ConcurrentModificationException。 -
ConcurrentModificationException
使用指定的详细消息构造一个ConcurrentModificationException
。- 参数:
-
message
- 关于此异常的详细消息。
-
ConcurrentModificationException
使用指定的原因和(cause==null ? null : cause.toString())
的详细消息(通常包含cause
的类和详细消息)构造一个新异常。- 参数:
-
cause
- 原因(将由Throwable.getCause()
方法保存以供以后检索)。(允许null
值,并表示原因不存在或未知。) - 自版本:
- 1.7
-
ConcurrentModificationException
使用指定的详细消息和原因构造一个新异常。请注意,与
cause
关联的详细消息不会自动合并到此异常的详细消息中。- 参数:
-
message
- 详细消息(将由Throwable.getMessage()
方法保存以供以后检索)。 -
cause
- 原因(将由Throwable.getCause()
方法保存以供以后检索)。(允许null
值,并表示原因不存在或未知。) - 自版本:
- 1.7
-