应用出现异常,发现报了ConcurrentModificationExceptdaogouion。之前倒是没碰到过。查资料发现是线程不安全的集合在进行迭代遍历时,集合进行了修改操作引起的。
static<T> Collection<T> synchronizedCollection(Collection<T> c) Returns a synchronized (thread-safe) collection backed by the specified collection. static<T> List<T> synchronizedList(List<T> list) Returns a synchronized (thread-safe) list backed by the specified list. static<K,V> Map<K,V> synchronizedMap(Map<K,V> m) Returns a synchronized (thread-safe) map backed by the specified map. static<T> Set<T> synchronizedSet(Set<T> s) Returns a synchronized (thread-safe) set backed by the specified set. static<K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m) Returns a synchronized (thread-safe) sorted map backed by the specified sorted map. static<T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s) Returns a synchronized (thread-safe) sorted set backed by the specified sorted set.
使用Collections中的方法。
比如:Set s = Collections.synchronizedSet(new HashSet(...));验证暂时没问题。
相关推荐
Java.util.ConcurrentModificationException 异常问题详解 ConcurrentModificationException 异常是 Java 中一个常见的异常,它发生在 Iterator 遍历集合时,集合同时被修改引起的异常。在 Java 中,集合类如 ...
如果在遍历集合或数组时,修改了集合或数组的内容,这可能会引发ConcurrentModificationException异常。这种异常是在运行时抛出的,而不是在编译期。 例如,在遍历集合时,修改集合的内容可能会引发...
Fail-fast机制是一种快速失败机制,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出ConcurrentModificationException异常,从而导致遍历失败。这种机制下的集合容器,例如HashMap和ArrayList等,都是...
3. Iterator 迭代器采用的是快速失败(fail-fast)机制,一旦在迭代过程中检测到该集合已经被修改(通常是程序中其它线程修改),程序立即引发 ConcurrentModificationException 异常,而不是显示修改后的结果,这样...
3. 迭代过程中,即使Map结构被修改,也不会抛ConcurrentModificationException异常; 4. 除了数组+链表+红黑树的基本结构外,新增了转移节点,是为了保证扩容时的线程安全的节点; 5. 提供了很多Stream流式方法,...
只读迭代:由于写时复制的机制,CopyOnWriteArraySet 的迭代器是只读的,即迭代过程中不会抛出 ConcurrentModificationException 异常。但是,迭代器获得的数据可能不包含最新的修改。 较高的内存占用:由于每次...
快速失败(Fail-Fast)迭代器机制是指在用迭代器遍历集合的过程中,如果检测到集合在迭代过程中被修改了,就会迅速抛出ConcurrentModificationException异常。快速失败机制的迭代器是为单线程设计的,因为它们不能...
Iterator的特点是只能单向遍历,但是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出ConcurrentModificationException异常。 5. 引用的对象是否一定能存活?不一定,看Reference类型,弱...
这意味着在多线程环境下,当一个线程正在遍历集合(通过迭代器进行)时,另一个线程修改了集合内容,就会触发快速失败(fail-fast)机制,导致ConcurrentModificationException异常。例如,上述代码中,线程在删除...
另外,CopyOnWriteArrayList由于其"读写分离"的思想,遍历和修改操作分别作用在不同的list容器,所以在使用迭代器进行遍历时候,不会抛出ConcurrentModificationException异常。 CopyOnWriteArrayList容器的缺点是...
但如果操作不当,例如在遍历ArrayList时直接使用subList方法返回的子列表进行remove操作,可能会导致ConcurrentModificationException异常,因为subList返回的子列表是一个视图,没有自己的迭代器。 5. 避免for循环...
使用Iterator时,应避免在遍历过程中修改集合,因为这可能导致 ConcurrentModificationException 异常。 【ListIterator接口】ListIterator是Iterator的子接口,专为List接口设计,除了提供基本的遍历功能外,还...
* fail-fast与fail-safe:Java集合在遍历时可能会抛出ConcurrentModificationException异常,这是因为集合在遍历时可能会被修改。fail-fast机制将抛出异常,而fail-safe机制将忽略修改。 * transient关键字:在...
HashMap的迭代器是fail-fast的,这意味着在遍历过程中,如果其他线程修改了HashMap,迭代器会抛出ConcurrentModificationException异常。 9. **遍历方式** HashMap提供了两种遍历方式:通过keySet()、entrySet()或...
8. 线程安全:HashMap不是线程安全的,如果在多线程环境下,一个线程正在遍历HashMap,同时另一个线程修改了HashMap,这会导致迭代器快速失败(fail-fast),即抛出ConcurrentModificationException异常。...
5. 快速失败机制:当集合在迭代过程中被修改时,如果不使用迭代器的remove()方法,可能会触发快速失败,即抛出ConcurrentModificationException异常。 6. Iterator:迭代器是遍历集合的主要方式,提供了hasNext()和...
快速失败迭代器在检测到集合结构在迭代过程中被修改时会抛出ConcurrentModificationException异常。这种策略适用于java.util包下的所有集合类,它们不是线程安全的。而java.util.concurrent包下的集合类则提供安全...
在高并发的情况下使用 ArrayList 的时候,会出现 ConcurrentModificationException 异常。HashSet 底层是 HashMap。 5. 锁 Java 中有两种锁:公平锁和非公平锁。公平锁在队列直接排队,非公平锁先抢锁,抢不到再...
在使用时,另一个线程改变了 Vector,那么将会抛出 ConcurrentModificationException 异常。因此,如果多线程并发访问 Vector,通常需要通过 synchronized 关键字进行同步控制。 HashMap 类 HashMap 是一个散列表,...
与传统集合类的迭代器不同,ConcurrentHashMap 的迭代器是非阻塞的,即使在遍历过程中有其他线程修改了映射表,迭代器也不会抛出 ConcurrentModificationException 异常,而是能够正确地反映修改后的状态。...