java set的线程安全
Posted jason47
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java set的线程安全相关的知识,希望对你有一定的参考价值。
CopyOnWriteArraySet和ConcurrentSkipListSet
与线程不安全的集合类的对应关系
- HashSet -> CopyOnWriteArraySet
- TreeSet -> ConcurrentSkipListSet
CopyOnWriteArraySet概述
- 底层实现依赖于CopyOnWriteArrayList,因此也适合于数据量很小的,读操作大于写操作的集合;
- 迭代器不支持可变的remove操作,使用迭代器遍历时速度很快;
ConcurrentSkipListSet概述
- 和TreeSet一样,支持自然排序,可以在构造的时候定义比较器;
- 其中的contains, add, remove操作都是线程安全的,但对于批量操作,比如addAll removeAll, containsAll并不能保证原子性执行,因为其底层还是调用contains, add, remove方法,在批量操作时,只能保证每一个的add等操作是原子性的,对于批量操作在调用时,还是要手动加上锁保证原子性;
- 不允许存储空元素;
作者:乌鲁木齐001号程序员
链接:https://www.jianshu.com/p/2bc70f6e838e
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
以上是关于java set的线程安全的主要内容,如果未能解决你的问题,请参考以下文章