首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏AVAJ

    ArrayList的Fast-fail(快速失败)策略

    3、为什么要报这个错?途中出错的地方是ArrayList.java:901定位到该处代码:

    2.1K40发布于 2019-10-21
  • 来自专栏转行程序员

    《2020 Offer收割机》| 线程安全法则

    .*; /* * @desc java集合中Fast-Fail的测试程序。 * fast-fail解决办法:通过util.concurrent集合包下的相应类去处理,则不会产生fast-fail事件。 ArrayList会产生fast-fail事件,而CopyOnWriteArrayList不会产生fast-fail事件。 * (01) 使用ArrayList时,会产生fast-fail事件,抛出ConcurrentModificationException异常;定义如下: * private static List<String> list = new ArrayList<String>(); * (02) 使用时CopyOnWriteArrayList,不会产生fast-fail事件

    65220发布于 2019-12-25
  • 来自专栏好好学习

    CopyOnWriteArrayList的源码分析

    CopyOnWriteArrayList简介 熟悉Java开发的童鞋都知道ArrayList是线程不安全的,在多线程的环境下可能会发生fast-fail机制,抛出ConcurrentModificationException 环境 本源码基于JDK1.8 fast-fail机制 fast-fail是一种快速失败机制,在容器中有广泛的运用,我们都知道ArrayList是线程不安全的,当多个线程同时对集合进行结构上的修改时,就可能会产生 fast-fail机制。

    40410发布于 2021-08-18
  • 来自专栏userlyz学习记录

    java学习之HashMap

    key, V value){} public synchronized V put(K key, V value) { 3、另一个区别是两个迭代器不同:HashMap的迭代器是(Iterator)是fast-fail 迭代器,而Hashtable的迭代器(Enumeration)不是fast-fail迭代器;所以当其他线程改变HashMap的结构(增加或者删除)就会抛出CME(ConcurrentModification

    47220编辑于 2022-08-18
  • 来自专栏爱编码

    Java的CopyOnWriteArrayList

    简介 ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制,会抛出ConcurrentModificationException 下面主要以下几个方面学习CopyOnWriteArrayList:1)什么是fast-fail机制 2)COW的设计思想 3)add方法实现原理 4)get方法实现原理 5)CopyOnWrite的缺点 原理分析 fast-fail机制 fail-fast是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生 fail-fast 机制。

    64420发布于 2019-07-25
  • 来自专栏于晓飞的专栏

    Java 容器---实现

    minCapacity 个元素 public synchronized void ensureCapacity(int minCapacity) ; Vector ---- 实现: 数组 线程安全: 是;fast-fail retainAll(Collection) O(n) O(n) O(n) indexOf(Object) O(n) O(1) O(n) Stack ---- 实现: Vector 线程安全: 是;fast-fail pop() O(1) O(1) O(1) peek() O(1) O(1) O(1) empty() O(1) O(1) O(1) LinkedList ---- 实现: 双指针链表 线程安全:否;fast-fail hash; this.next = next; } } 实现: 开散列 + WeakReference + ReferenceQueue 线程安全: 否; fast-fail 实现: 闭散列;没有用Map.Entry类,数组偶数位置放 key,奇数位置放 value 线程安全: 否;fast-fail保护 是否支持null:是 容量:默认初始容量32;加载因子2/3;容量一定为

    89410发布于 2018-09-11
  • 来自专栏落叶飞翔的蜗牛

    ArrayList源码解析(3)

    .*; /* * @desc java集合中Fast-Fail的测试程序。 * fast-fail解决办法:通过util.concurrent集合包下的相应类去处理,则不会产生fast-fail事件。 ArrayList会产生fast-fail事件,而CopyOnWriteArrayList不会产生fast-fail事件。 * (01) 使用ArrayList时,会产生fast-fail事件,抛出ConcurrentModificationException异常;定义如下: * private static List<String> list = new ArrayList<String>(); * (02) 使用时CopyOnWriteArrayList,不会产生fast-fail事件

    65420发布于 2021-01-28
  • 来自专栏啥都有的专栏

    juc系列-并发Queue

    ConcurrentLinkedQueue的一些需要注意的点: 1.不允许存储null值,否则抛出NPE 2.Iterator遍历时数据的弱一致性 3.size方法没有绝对的实时性 4.没有fast-fail (v == null) throw new NullPointerException(); } 2.Iterator遍历时数据的弱一致性 3.size方法没有绝对的实时性 4.没有fast-fail 机制 前两个问题都是由于ConcurrentLinkedQueue的异步特性造成的,在遍历时无法保证队列不会被其他线程修改.并且ConcurrentLinkedQueue没有fast-fail机制,即在遍历队列时

    39720编辑于 2022-05-12
  • 来自专栏全栈程序员必看

    HashMap和HashTable的理解与区别

    JDK8之前的版本中,Hashtable是没有fast-fail机制的。在JDK8及以后的版本中 ,Hashtable也是使用fast-fail的。

    34410编辑于 2022-07-22
  • 来自专栏Java note

    大厂面试 | 别再问我Java List八股文了!

    大彬:如果使用foreach删除元素的话,会导致快速失败(fast-fail)问题,可以使用迭代器的 remove() 方法,避免fast-fail问题。

    56110编辑于 2022-07-08
  • 来自专栏与神兽党一起成长

    学习Java Collection Framework的Iterator实现

    在Java Collection Framework的Iterator实现中大多数是fast-fail方式的,而支持并发的容器数据结构则没有这个限制。 = expectedModCount的情况,从而抛出异常fast-fail。 Iterator<E> { Entry<K,V> next; // next entry to return int expectedModCount; // For fast-fail 而与HashMap不同的地方,ConcurrentHashMap的Iterator并不是fast-fail的,它并没有判断modCount;除此之外还应该看到它对nextEntry的处理,在advance

    57650发布于 2018-10-22
  • 来自专栏Java note

    大厂面试 | 别再问我Java List八股文了!

    大彬:如果使用foreach删除元素的话,会导致快速失败(fast-fail)问题,可以使用迭代器的 remove() 方法,避免fast-fail问题。

    37630编辑于 2022-02-13
  • 来自专栏第三方工具

    ConcurrentModificationException异常原因和解决方法

    这个涉及到 fast-fail 机制(快速失败),可以提前预料遍历失败情况,防止数组越界异常。

    43210编辑于 2024-10-09
  • 来自专栏全栈程序员必看

    java集合源码分析(二):List与AbstractList

    1.迭代器的 fast-fail 机制 我们知道,AbstractList 默认是不提供线程安全的保证的,但是为了尽可能的避免并发修改对迭代带来的影响,JDK 引入一种 fast-fail 的机制,即如果检测的发生并发修改 = expectedModCount) throw new ConcurrentModificationException(); } } 结合代码,我们就不难理解这个 fast-fail ListItr 继承了 Itr ,因此他们都有一样的 fast-fail机制。 值得一提的是,对于启用了 fast-fail 机制的实现类,只有使用迭代器才能边遍历边删除,原因也是因为并发修改检测: 2.Itr 迭代器 现在,回到 Itr 的代码上: private class Itr AbstractList 引入了并发修改下 fast-fail 的机制,在内部维护一个成员变量 modelCount,默认为零,每次结构性修改都会让其+1。

    57520编辑于 2022-09-23
  • 来自专栏Java note

    Java集合经典26问!

    fast-fail是Java集合的一种错误机制。当多个线程对同一个集合进行操作时,就有可能会产生fast-fail事件。 此时modCount(记录集合操作过程的修改次数)会加1,不等于expectedModCount,那么线程a访问集合的时候,就会抛出ConcurrentModificationException,产生fast-fail 边遍历边修改集合也会产生fast-fail事件。 解决方法: 使用Colletions.synchronizedList()方法或在修改集合内容的地方加上synchronized。

    74710编辑于 2022-07-08
  • 来自专栏小赵的Java学习

    源码中的modCount是什么?有什么作用

    E> { Entry<K,V> next; // next entry to return int expectedModCount; // For fast-fail

    1.4K30编辑于 2022-12-02
  • 来自专栏彤哥读源码

    死磕 java集合之PriorityQueue源码分析

    (3)comparator,比较器,在优先级队列中,也有两种方式比较元素,一种是元素的自然顺序,一种是通过比较器来比较; (4)modCount,修改次数,有这个属性表示PriorityQueue也是fast-fail 的; 不知道fast-fail的,查看这篇文章的彩蛋部分:【死磕 java集合之HashSet源码分析】。

    55420发布于 2019-07-08
  • 来自专栏迁移内容

    Java集合:关于 ArrayList 的内容盘点

    当多个线程对同一个集合进行操作时,就有可能会产生 fast-fail 事件。 modCount(记录集合操作过程的修改次数)会加 1,不等于 expectedModCount,那么线程 A 访问集合的时候,就会抛出 Concurrent Modification Exception,产生 fast-fail 边遍历边修改集合也会产生 fast-fail 事件。 解决方法: 使用 Colletions.synchronizedList 方法或在修改集合内容的地方加上 synchronized。

    1.3K10编辑于 2022-12-01
  • 来自专栏java大数据

    缓存是集合框架HashMap怎么做?

    这叫fast-fail(快速失败,失败越快,错误越小) ii)HashMap 马克-to-win:和Hashtable相比,HashMap是线程不安全的。

    35800发布于 2021-10-10
  • 来自专栏Java 源码分析

    ArrayList 源码分析

    主要方法 下面的方法后面标有数字的就是表示重载方法 ctor-3 get set add-2 remove-2 clear addAll write/readObject fast-fail 机制 = expectedModCount) { throw new ConcurrentModificationException(); } } 2. fast-fail    所谓的 fast-fail 就是在我们进行 iterator 遍历的时候不允许调用 Collection 接口的方法进行对容器修改,否则就会抛异常。

    74440发布于 2018-04-17
领券