java set的线程安全

Posted jason47

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java set的线程安全相关的知识,希望对你有一定的参考价值。

CopyOnWriteArraySetConcurrentSkipListSet

 

与线程不安全的集合类的对应关系

  • 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的线程安全的主要内容,如果未能解决你的问题,请参考以下文章

Java有线程安全的set吗?

Java并发编程之set集合的线程安全类你知道吗

Java有线程安全的set吗?

java set的线程安全

面试官:Java 有线程安全的 set 吗?我竟然答不上来。。

java priorityblockingqueue 线程安全吗