关注
一、HashMap 与 ConcurrentHashMap 的差异
1. 数据一致性风险:
- 在多线程环境下使用 HashMap 时,由于其缺乏线程安全机制,很容易出现数据不一致的情况。例如,两个线程同时添加相同键值对,后添加的线程可能会覆盖先添加的线程的数据,导致数据丢失或错误。
- ConcurrentHashMap 通过精细的锁策略或无锁算法,如 CAS(Compare And Swap),有效地避免了数据覆盖问题。不同线程可以同时对不同的部分进行操作,只有在操作同一部分数据时才会进行同步,从而保证了数据的一致性。
2. 死循环风险:
- HashMap 在进行扩容等操作时,如果多个线程同时进行修改,可能会因为哈希冲突处理不当而陷入死循环,导致 CPU 占用率飙升。这是因为 HashMap 在扩容时会重新计算哈希值并重新排列元素,这个过程中如果多个线程同时操作,可能会导致链表结构被破坏,形成循环链表。
- ConcurrentHashMap 的内部实现经过精心设计,避免了这种由于并发修改而导致的循环问题。它采用了更高效的并发控制机制,确保在扩容等复杂操作时也能保持数据结构的正确性。
二、ConcurrentHashMap 保证线程安全的方式
1. 使用 CAS 操作:
- 以银行账户管理系统为例,CAS 操作就像是一个原子的“比较并交换”机器。当一个线程想要增加用户余额时,它首先读取当前余额,这相当于获取了一个“预期值”。然后,它计算出要增加的金额后,尝试用新的值去替换旧的值,但在替换之前,它会先检查当前余额是否仍然是之前读取的预期值。如果是,说明没有其他线程在这个期间修改了余额,那么就可以安全地进行替换;如果不是,说明有其他线程已经修改了余额,那么当前线程就需要重新读取最新的余额,并再次尝试增加。
- 这种方式的优点是不需要进行传统的锁操作,避免了线程阻塞和上下文切换带来的开销,从而提高了并发性能。
2. 使用 Synchronized:
- 对于更复杂的操作,如合并两个账户的信息,需要确保多个步骤作为一个整体完成。这时候,ConcurrentHashMap 可能会使用 synchronized 关键字来实现同步。Synchronized 会在代码块级别或方法级别上对共享资源进行加锁,确保在同一时间只有一个线程可以访问这些资源。
- 例如,在合并账户信息时,可能需要先读取两个账户的余额,然后进行计算,最后更新两个账户的余额。这个过程中,如果不进行同步,可能会有其他线程在中间修改了账户余额,导致结果错误。使用 synchronized 可以确保在这个复杂的操作过程中,其他线程无法干扰,从而保证了数据的一致性。
总的来说,ConcurrentHashMap 通过结合 CAS 操作和 synchronized 等技术,在保证线程安全的同时,尽可能地提高了并发性能,适用于多线程环境下对共享数据的高效操作。
查看原帖
点赞 评论
相关推荐
牛客热帖
- 1... 最有挫败感的一件事8306
- 2... 你就天天围着秋招转吧,饭也不用吃了,课也不用上了,就天天思考它到底发不发offer,把人想废,把身体想烂,把爱好全部荒废,每天就无时无刻的看邮箱有没有新邮件。你就看你***就得了。如果你还有脑子,那么不管什么时候看到这句话都该去做自己该做的事,你的肩上还有人类的希望,你的背后还有很多群友爱你。你可以继续这样把自己压垮,直到失去所有曾经引以为傲的东西——你的学习能力、你的热情、你的身体健康,甚至你的梦想。你每天守着邮箱等待的,不是成功的钥匙,而是徒增的焦虑和无尽的自责。是时候停下来,问问自己:这真的值得吗?如果你还记得那些曾经驱动你的梦想,那些让你熬夜苦读、让你为之奋斗的目标,那么你就该意识到,秋招只是你人生中一个节点,而不是全部。没有哪个Offer能定义你的一生,你也不需要为了这一时的得失,丢掉对生活和学习的热情。你是值得被爱,被认可的。那些关心你的人不希望你被秋招的压力吞噬,他们希望看到一个满怀信心、活力四射的你。肩上的责任不仅仅是一个工作机会,而是为自己和未来的生活去不断努力,保持平衡,拥有健康的身心。放下手机,关闭邮箱,去做让你真正快乐、充实的事。读书、学习、运动、发展自己的兴趣,这些都将为你的人生铺平道路。当你真正成长为一个内心强大、自信满满的人,机会自然会到来7364
- 3... 选择国央企了6101
- 4... 你跟HR谈薪资是否全面呢?4509
- 5... 招银网络第二批(开?)4206
- 6... #浪潮求职进展汇总# 一面过了但是心理测评一直没过,做了四次都没过,hr看不下去了亲自帮我把测评做了3869
- 7... 准备和东哥做兄弟了,最快意向3667
- 8... 秋招结束,写个总结3636
- 9... 10.15 百度笔试3416
- 10... 美团 java后端 1面3097
正在热议
# 非技术岗薪资爆料 #
128650次浏览 1190人参与
# offer帮选 #
146056次浏览 1561人参与
# 平安产险科技中心求职汇总 #
46081次浏览 490人参与
# 无实习如何秋招上岸 #
587591次浏览 7326人参与
# 毕业季,你想好怎么跟生活对线了吗? #
129288次浏览 2746人参与
# 想实习转正,又想准备秋招,我该怎么办 #
416537次浏览 4467人参与
# 叠纸游戏校招 #
24979次浏览 351人参与
# 得物求职进展汇总 #
31423次浏览 497人参与
# 写简历别走弯路 #
574941次浏览 7151人参与
# 24届秋招同行攻略分享 #
788741次浏览 12128人参与
# 面试中的破防瞬间 #
168776次浏览 1880人参与
# 韶音科技求职进展汇总 #
29598次浏览 377人参与
# 如果实习可以转正,你会不会放弃秋招 #
153436次浏览 2339人参与
# 你觉得今年秋招难吗 #
949181次浏览 13138人参与
# 你觉得技术面多长时间合理? #
33334次浏览 226人参与
# 0offer是寒冬太冷还是我太菜 #
732467次浏览 6876人参与
# 选了这个offer,你有没有后悔? #
256858次浏览 2262人参与
# 我的成功项目解析 #
178494次浏览 4078人参与
# 我的简历长这样 #
1604216次浏览 25282人参与
# 你是怎么缓解秋招焦虑的? #
78344次浏览 777人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
43782次浏览 367人参与
# 机械人的offer怎么选 #
28323次浏览 248人参与