成都汇智动力老师直接接听

400-029-09** 400-029-0997 转 65635
查看完整号码
扫码拨号
微信扫码拨号

Java开发之高并发编程篇(八)——安全访问的集合(1)

作者:汇智动力学院 来源:汇智动力学院 2022年11月16日 更新

在开发中我们使用比较多的集合就是List、Set和Map了,并且我们也知道大部分用的基本上都是ArrayList、LinkedList、HashMap、HashSet或者TreeSet这几个集合。但是我们在学习使用它们的时候都知道它们这几个在并发处理的时候并不会保证多线程的安全访问,也就是说多线程环...

在开发中我们使用比较多的集合就是List、Set和Map了,并且我们也知道大部分用的基本上都是ArrayList、LinkedList、HashMap、HashSet或者TreeSet这几个集合。但是我们在学习使用它们的时候都知道它们这几个在并发处理的时候并不会保证多线程的安全访问,也就是说多线程环境下使用这几个集合不能用于共享数据访问。那有没有一些方法保证这些集合并发安全访问呢? 1.Collections工具类并发的支持 其实java有一个叫做Collections的工具类提供了一些保证List、Set、Map线程安全方法的方法,如下图:
其实通过其名称也不难猜想底层是使用了synchronized关键完成的同步代码块或者同步方法的实现。其任意一个方法的源码如下(以List为例):
2.支持并发安全访问的集合 ①ConcurrentHashMap HashMap原理简介: TREEIFY_THRESHOLD 的值)将链表改为红黑二叉树的存储,这样对于数据操作的效率就大大提高了。JDK8之后的HashMap如图:
部分源码如下:
HashMap对其数据操作并没有做线程安全的处理,HashMap在其插入数据的时候都要进行容量检查看有没有超过设定的thredhold,如果超过,则需要扩容,但是这样一来,就需要对整个HashMap里的节点进行重哈希操作,那么如果现在多个线程访问HashMap数据那可能导致一个线程操作了之后HashMap进行哈希重新计算操作,另外一个线程读取到的就不准确,所以操作过程中并不是线程安全的。 ConcurrentHashMap原理简介: ConcurrentHashMap是J.U.C(java.util.concurrent包)的重要成员,它是一个线程安全确效率相对高效一些的类似HashMap的实现类。 ConcurrentHashMap 的实现同样也分为JDK7和JDK8版本。 Segment将访问的数据分成了一段一段的进行存储,因为每一个Segment都是一个锁所以相当于每一段数据也加了锁,这样就可以每一段锁支持一个线程访问,即保证了线程安全又降低了锁的粒度,大大提高了并发操作的效率。
volatile 关键字修饰,但是又因为 volatile 只是能保证线程的可见性和有序性不能够保证原子性操作,所以在进行put等操作的时候还使用了 synchronized 代码块处理。部分核心源码如下图所示:
它采用了synchronized和CAS(往期文章中有介绍CAS操作)来替代JDK7的Segment分段锁的实现,JDK8中采用Synchronized关键字也是因为它在JDK6之后做了自旋、锁粗化、锁消除、锁升级等优化,另外对比于JDK7的Segment分段锁的是多个HashEntry,而JDK8锁的是单个的HashEntry粒度更小,效率更高。并且考虑到JDK可能对JVM底层synchronized关键字还会进行不断的优化所以JDK采用了synchronized的设计。 总的来说ConcurrentHashMap是我们在并发访问下的不错的HashMap的替换者。 (未完待续)

往期文章 墙裂推荐 [ 1] Java开发之高并发必备篇(七)——线程池 [2 ] Java开发之高并发必备篇(六)——Lock和ReentrantLock(3) [3 ] Java开发之高并发必备篇(六)——Lock和ReentrantLock(2) 原创视频 墙裂推荐 校区最新开班 ↓↓↓

活动福利 // 1 毕业礼包 | 毕业学员免费赠送《软件测试技术大咖专题课》,助力学员早日突破高薪瓶颈 // 2 入职礼包 |就业学员免费赠送《Java语言开发视频课》及源代码,市场价值12800元 // 3 推荐有奖 |推荐好友成功报名,立得丰厚“伯乐”红包 (欢迎详询校区老师)

详询软件测试&开发培训事宜

添加微信咨询
杨老师 @成都汇智动力

专业解答各类课程问题、介绍师资和学校情况

微信号:186******73

立即咨询

    相关资讯

  • 新征程,新起点!汇智动力培训学院成都校区乔迁大吉,全新启航

    谨此怀着无比激动和感恩的心情,我们向大家宣布一个:为了提供更优质的教学环境、更先进的教学设备,以迎接更广阔的未来,汇智动力培训学院成都校区已于2025年8月18日正式乔迁至新址啦!这不是一次简单的地址变更,而是我们迈向更高品质、更专业化服务的新里程碑。自成立以来,我们...

    2025/8/21 2:28:33
  • 7月就业学员薪资曝光!专科生,月薪17500元

    盛夏时节,捷报如潮!7月,来自南京、成都、西安、武汉、重庆、杭州、贵阳7大校区的学员,怀揣转行梦想而来,满载高薪offer而归。他们中有土木工程师、艺术设计师、金融从业者,也有应届毕业生和职场“再出发”的追梦人。今天,我们用一份真实就业数据报告,揭开IT测试领域的高薪密码——无关出身,只看实力,你的...

    2025/8/16 2:26:30
  • 软件测试面试谈薪技巧:如何争取理想薪资?

    软件测试面试谈薪环节既兴奋又忐忑:说高了怕被拒,说低了心不甘。别担心!谈薪并非“看运气”,而是有策略、有技巧的“价值谈判”。今天,我们就来拆解软件测试面试谈薪的关键步骤和实用话术,助你自信拿下理想Offer!一、知己知彼,百战不殆1. 深度“知己”:评估你的核心价值技术硬实力: 熟练哪些测...

    2025/7/12 2:15:02
  • 软件测试工程师:选准你的赛道,跑出职业加速度!

    刚入行的软件测试工程师,往往从功能测试起步,与各种软件“较劲”,确保它们运行如常。但“点点点”只是起点,绝非终点。软件测试的世界远比想象中宽广,前方清晰铺展着几条充满机遇的道路。今天,就带你一探究竟,看清哪条路能通往你理想的未来。一、深耕功能测试,成为领域专家这条路始于*基础的功能验证,却不止于此。...

    2025/7/7 2:18:29

“成都汇智动力”是成都汇智动力信息技术有限公司在教育宝平台开设的店铺,若该店铺内信息涉嫌虚假或违法,请点击这里向教育宝反馈,我们将及时进行处理。

机构评分

环境:5.0师资:5.0服务:4.0效果:4.0

公示信息

店铺名称:成都汇智动力

单位名称:成都汇智动力信息技术有限公司

账号名称:cdhzdl(180******07)

所属城市:四川成都

入驻时长:12年

在线客服:在线聊

微信咨询

返回顶部