Java并发编程之set集合的线程安全类你知道吗
Java并发编程之-set集合的线程安全类
Java中set集合怎么保证线程安全,这种方式你知道吗?
在Java中set集合是
本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发集合系列》教程的第二篇:
本文主要内容:Set集合子类底层分别是什么?基于底层为什么set的子类可以存放一个数据?怎么解决set线程安全问题?
一:Set集合子类
Set的三个子类分别是:HaseSet、TreeSet、LinkedHashSet.这三个都是线程不安全的。那么这三个子类的底层是什么?
二:三个子类底层
1:haseSet的底层其实是hashMap
2:treeSet的底层其实就是一个TreeMap
3:linkedHashSet底层LinkedHashMap
三:set添加的时候只有一个参数怎么做到的?
通过上面我们可以看出,set三个子类的底层其实都是Map的。我们也知道Map是key-value键值对出现的。我们也知道,set添加方法是set.add(“司小司”)。参数只有一个,不是键值对的,那么底层Map怎么存储的呢?
我们来add方法的源码是怎么实现的吧:
从源码中,我们可以看到,把传递的参数作为key处理的。那么,value又是什么呢?
PRESENT是什么呢?
其实就是new了个object对象。
问题来了:set为什么不能不能存放重复值,而list就可以了呢?
从上面add的源码中,我们可以看出,add的数据是作为map的key来存放的。在Map中,Key是不能重复的。所以,set里面的数据不能有重复的。
四:Set集合怎么实现线程安全?
方案一:
和list一样,使用Colletcions这个工具类syn方法类创建个线程安全的set.
Set<String> synSet = Collections.synchronizedSet(new HashSet<>());
方案二:
使用JUC包里面的CopyOnWriteArraySet
Set<String> copySet = new CopyOnWriteArraySet<>();
总结:
创建set有五种方法,其中通过三个子类直接创建出来的是线程不安全的。想要创建线程安全的set可以通过工具类或者是juc包下相关的类创建。如下图:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java并发编程之支持并发的list集合你知道吗
Java并发编程之-list集合的并发. 我们都知道Java集合类中的arrayList是线程不安全的。那么怎么证明是线程不安全的呢?怎么解决在并发环境下使用安全的list集合类呢? 本篇是《凯哥(凯哥Java:kagejava)并发编程学习》系列之《并发集合系列》教程的第一篇: 本文主要内容:怎么证明arrayList不是线程安全的?怎么解决这个问题?以及遇到问题解决的四个步骤及从源码来分析作者思路。 一:怎么证明arrayList在并发情况下是线程不安全的呢? 创建一个list,用多个线程向list中添加数据。来看看结果 查看运行结果: 我们发现了一个异常:java.util.ConcurrentModificationException java.util.ConcurrentModificationException是什么 这个异常什么意思呢?我们来看看这个异常源码中类的注释信息: This exception may be thrown by methods that have detected concurrent(此异常可能由检测到并发的方法引发). 一般可以理解为,这是...
- 下一篇
【云栖号案例 | 新零售】汇合营销通过数加平台降低数据使用门槛、提高开发效率
云栖号案例库:【点击查看更多上云案例】不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 公司简介 我们是杭州汇江容海网络有限公司,专注于电商数字化营销。我们公司旗下的汇合营销是一个以精准营销为核心的电商整合营销服务平台,专注于为品牌电商提供淘内、淘外一站式整合营销解决方案,基于大数据挖掘技术、电商人群画像技术、精准定向技术,及丰富的媒介资源,为品牌客户提供全方位、系统化、个性化营销解决方案。 业务痛点 大量的数据统计。我们公司每天收集到的数据,多的时候一天有20多亿访客浏览轨迹,在DMP业务系统中,需要对每个访客的浏览内容进行分析,打上相应标签并进行统计;同时,数据分析师每天也需要产生各种报表,帮助客户进行广告优化。大量的数据存储、统计和大量的业务需求,这使得开发过程中,既要保证高效率,同时也要降低成本。 实时大数据查询。广告商在后台的推广组选择标签时,系统需要在毫秒级的时间内显示标签的用户量并预估展现量信息,由于用户选择的标签一般都会比较多、条件比较复杂,并且每个标签的用户也可能重复,从而无法在用户选择标签前做预计算,必须每次在亿级日志表中查询,而...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库