他是线程安全的set,底层new了一个CopyOnWriteArrayList;
![](https://img-blog.csdnimg.cn/img_convert/14db47702a9599bee97c75f520672d71.png)
然后使用的是volatile修饰的Object数组;
添加的时候调用CopyOnWriteArrayList的addIfAbsent方法,会先遍历一次数组,如果存在则返回false;
如果不存在添加到数组,并且采用ReentrantLock来保证线程安全;
![](https://img-blog.csdnimg.cn/img_convert/8bb9f5753b632cabe660480a8abc6449.png)
![](https://img-blog.csdnimg.cn/img_convert/cd0b5380fdc04f58890bca14568f3307.png)
总结
1.CopyOnWriteArraySet使用ReentrantLock来保证线程安全
2.初始化的时候会new一个CopyOnWriteArrayList
3.插入方法也是调用的CopyOnWriteArrayList的添加方法