编程爱好者联盟 2016-10-26
继承该类,必须实现size()和iterator(),因为该类操作集合都是通过iterator
一种多线程对同一集合操作的保护措施,确保操作目标没有被其他线程操作过,与cas思想有异曲同工之处
具体在集合中的实现:
定义一个全局变量modCount,表示集合被修改的次数
每次进行动态操作的时候,modCount++
在Iterator中定义一个全局变量expectedModCount,
每次操作Iterator的时候都会比较modCount和expectedModCount,相等则认为这个集合没有被并发修改,否则会抛出ConcurrentModificationException
所以只要有modCount这个变量的,都是线程不安全的,这种集合最好使用迭代器,因为直接操作不会检查集合有没有被并发修改
使用volatile修饰modCount
被volatile修饰的变量,程序中的每次引用,处理器都会从内存(共享内存)中去读值,而不是从寄存器(线程独有内存)中获取
这使得fail-fast策略更可靠
该类实现了迭代器
继承该类,需要实现get方法,因为迭代器的next是调用了get
实际长度是存储数组的length,不是全局变量size,size意味着有多个个元素是有数据的
必用ensureCapacity(int minSize),需要增大容量的时候,都要调用
都要确认这个容量是否支持,不支持则会扩展容量
防止数组越界
查看原文:http://blog.zswlib.com/2016/10/26/jdk%e9%a1%ba%e5%ba%8f%e8%a1%a8%e7%ac%94%e8%ae%b0/