CopyOnWriteArraySet为线程安全的Set实现,本文记录CopyOnWriteArraySet源码解析,基于JDK1.8。
类结构
先来看下CopyOnWriteArraySet的类层级关系图:
没什么好说的。再来看看内部属性:
1 | // 就一个属性,CopyOnWriteArraySet内部采用CopyOnWriteArrayList存储元素 |
和HashSet不一样的是,CopyOnWriteArraySet内部采用CopyOnWriteArrayList存储元素,这也是CopyOnWriteArraySet名字的由来,因为CopyOnWriteArrayList是线程安全的,CopyOnWriteArraySet的方法都是基于CopyOnWriteArrayList实现的,所以CopyOnWriteArraySet自然而然也是线程安全的,同样的,在并发环境下获取数据是弱一致性的!
方法解析
构造函数
1 | // 空参构造函数,实际就是初始化CopyOnWriteArrayList |
add(E e)
add(E e)
添加指定元素:
1 | public boolean add(E e) { |
可以看到,CopyOnWriteArraySet的add方法通过调用CopyOnWriteArrayList的addIfAbsent来确保元素不重复,以满足Set的特性。
剩下方法略
剩下方法都比较简单,都是直接调用CopyOnWriteArrayList方法实现,感兴趣自己阅读源码。