为了账号安全,请及时绑定邮箱和手机立即绑定

HashMap中在项目中不用锁,使用什么方法可以把他改造成线程安全的?

HashMap中在项目中不用锁,使用什么方法可以把他改造成线程安全的?

萧十郎 2018-10-05 08:15:21
在java中,Hashmap是线程不安全的,通过锁的机制和粒度,在源码中提供了HashTable和ConcurrentHashMap两种数据结构供使用,但是如果不使用锁,有什么方法将HashMap做到再业务中是线程安全的呢?==========================================================================我有一种思路是这样的:首先有一个map,再使用它的时候,将他赋值给一个新的map,我们叫他map',然后再将该map'做为key,存成一个新map。新map为Map<map',value>,这样每次添加的时候,是基于map'来添加的?各路大神,还有没有其他思路呢?大家一起来讨论讨论哈。
查看完整描述

2 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

共享数据不用锁不能做到线程安全。你的方法复制那步线程不安全。
要线程安全要么不共享,要么用锁

查看完整回答
反对 回复 2018-10-14
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

楼主说的方法是CopyOnWrite吧,主要思想就是操作的时候创建一个副本,但是可以参照JDKCopyOnWriteArrayList,其实它set操作的时候也是有加锁的,在遍历的时候用的是副本,所以不用加锁操作.因为如果不加锁的,最后的数据merge回去是一件头疼的事情(意味着,你在merge的时候肯定是要加锁的)

查看完整回答
反对 回复 2018-10-14
  • 2 回答
  • 0 关注
  • 1624 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信