首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
HashMap是线程安全的吗?如果不是该如何解决?
[问答题]
HashMap是线程安全的吗?如果不是该如何解决?
添加笔记
求解答(0)
邀请回答
收藏(126)
分享
纠错
31个回答
添加回答
29
波波来学习
不是线程安全,底层实现是"数组、链表、红黑树",在多线程put时可能会造成数据覆盖,并且put会执行modCount++操作,这步操作分为读取、增加、保存,不是一个原子性操作。解决办法就是不要在多线程中使用HashMap,或者使用更安全的CurrentHashMap,CurrentHashMap通过对桶加锁,以较小的性能来保证线程安全。
发表于 2022-05-24 10:52:26
回复(0)
13
卡农变骤
HashMap不是线程安全的,在添加数据的时候,会根据key和value计算出在底层数组中的位置,然后封装成entrey对象插入,但由于HashMap并没有做对应的线程安全处理,所以如果恰好两个线程同时操作的话,就有点会将其中一个数据覆盖掉,这不符合要求。 那么解决方法就是说,你可以在操作这个HashMap的时候手动的上锁,可以通过Lock也可以通过synchronized关键字。当然我更推荐直接使用java已经提供了的ConcurrentHashMap,其内部使用了Lock来解决线程安全问题,并且底层结构也进行了一些变动,上锁的时候只会锁对应下标的元素,不会对其他位置造成影响,即保证了线程安全,又保证了性能。
编辑于 2022-06-21 15:00:40
回复(2)
6
牛客793464225号
不是线程安全的。1.使用HashTable,效率极慢。不推荐使用 2.使用collections下的synchronizeXXX()方法将HashMap包装成线程安全的集合。3.使用ConcurrentHashMap并发集合。主要采用锁定头结点方式降低锁的粒度,从而极大的提高了并发效率。
发表于 2022-06-16 17:01:10
回复(0)
4
大哥们不要卷我
HashMap不是线程安全的。hashmap的底层是利用数组+链表+红黑树的组合,在多线程的情况下,多个线程同时触发hashmap的时候可能会发生冲突。所以在多线程的时候不建议使用hashmap。如果想使用线程安全的hashmap,可以使用hashtable、collections将hashmap包装成线程安全的hashmap、concurrenthashmap。hashtable属于古老的api,一般不推荐使用,concurrenthashmap是目前比较推荐使用的一种方式
发表于 2022-06-11 14:23:31
回复(0)
3
求你们别卷了的小章鱼很有力量
HashMap不是线程安全的。多个线程同时访问一个 HashMap 可能会引发冲突并导致数据损坏或不一致的结果。 要解决这个问题可以采用几种方式: 使用 Hashtable 类代替 HashMap。Hashtable 类与 HashMap 类类似,但它是线程安全的。 使用 Collections.synchronizedMap() 方法将 HashMap 包装在一个同步映射中,使其成为线程安全的。 使用 ConcurrentHashMap 类来替代 HashMap 类。ConcurrentHashMap 是 Java 平台从 1.5 版本开始引入的一个线程安全的哈希映射类,它在高并发环境中表现出更高的性能
发表于 2023-11-11 17:05:45
回复(0)
1
牛客520317745号
不是线程安全,在多线程时容易因扩容而产生死循环。要实现线程安全,有三个方法: 1.hashtable,通过synchoized实现线程安全,但多线程是,性能较差 2.通过collection保装hashmap成安全的hashmap 3.Concurrenthashmap,jdk7中,Concurrenthashmap由segment数组构成,segment数组由若干个hashENtry构成,通过分段锁来实现线程的安全。jdk8中,Concurrenthashmap基于数组+链表+红黑树结构。采用cas+synchronized实现更低力度的锁实现线程安全。
发表于 2022-09-23 11:14:32
回复(0)
0
闲鱼JAVA
不是,方法一:自己手动加锁,方法二:可以使用CuncurrentHashMap
发表于 2024-05-09 11:09:06
回复(0)
0
秋秋qx
HashMap不是线程安全的。 可以换成ConcurrentHashMap,或者给HashMap变量加锁
发表于 2024-04-08 21:00:17
回复(0)
0
也不容易的可乐很高大
不是 使用concurrentHashMap即可喜喜
发表于 2024-04-02 18:08:43
回复(0)
0
钟情于风TuT
HashMap不是线程安全的,因为这个问题在1.7之前会发生循环死链的问题因为使用的是头插法,在1.7以后变为尾插法 我们可以通过使用加锁的方式进行加锁,如果多线程进行操作会发生并发修改异常,或者可以使用线程安全的如ConcurrentHashMap或者使用Collections工具类对其进行包装
编辑于 2024-04-01 20:08:49
回复(0)
0
Penalize
答:不是线程安全,底层是数组+链表+红黑树。推荐使用CurrentHashMap,通过对桶加锁,以较小的性能保证线程安全。
发表于 2024-03-28 10:10:21
回复(0)
0
牛客380258662号
不是 使用ConcurrentHashMap
发表于 2024-02-29 10:50:04
回复(0)
0
江南151
HashMap 在多线程环境下并不是线程安全的。为了解决 HashMap 在多线程环境下的线程安全问题,可以使用 Hashtable、ConcurrentHashMap、Collections.synchronizedMap或自定义线程安全的Map
发表于 2024-02-26 15:17:09
回复(0)
0
javamer
1.hashmap不是线程安全的 2.解决方法:hashtable 、 Collections将hashmap包装程线程安全的hashmap、ConcurrentHashMap 3,第一种不推荐,底层 数组以及链表,当数量庞大时,处理数据速率太慢 淘汰了几乎 4。第二钟提供了一些方法包装我们的map 5。最后在jdk8出现的,降低了锁的粒度,从而提高并发的能力
发表于 2023-10-31 20:54:33
回复(0)
0
神奇的打工人加油
不是线程安全的,多线程put时可能会造成数据覆盖,解决方法是使用ConcurrentHashMap
发表于 2023-08-23 18:14:24
回复(0)
0
深情的三文鱼在写面经
Map不是线程安全的,建议你使用current hash map。假如非要用hash map的话,可以用co或使用lock接口。来进行加锁。
发表于 2023-08-17 00:05:09
回复(0)
0
想家的鳄鱼
不是,hashmap底层实现是"数组、链表、红黑树",在多线程put时可能会造成数据覆盖。 解决办法使用更安全的CurrentHashMap,CurrentHashMap通过对桶加锁,以较小的性能来保证线程安全。
发表于 2023-08-14 19:25:45
回复(0)
0
jdasji
HashMap不是线上安全的,hashmap底层是由数组加链表或红黑树组成,没有对线程安全做处理,在put元素时如果有两个线程同时在操作的话则会覆盖掉其中的一个,这就使得线程不安全。建议有多个线程时一般使用concurrentHashmap来代替hashmap·或者对hashmap手动加锁(如synchrinized或lock),
发表于 2023-08-13 20:30:38
回复(0)
0
牛客601932463号
HashMap不是线程安全的,jdk1.7的HashMap插入元素采用的是头插法,在多线程情况下回出现线程安全(死链),1.8使用尾插法解决了死链问题,但是在多线程情况下仍有可能出现数据覆盖的问题,并且修改集合后modCount++操作并不是一个原子性操作。解决方法就是在多线程情况下使用线程安全的Map如ConcurrentHashMap,1.7使用分段锁segment + entry数组来实现线程安全,1.8使用cas+synchronized来实现线程安全
发表于 2023-08-05 13:31:52
回复(0)
0
牛客776825122号
hashmap不是线程安全的,会根据Key和value计算出在底层数组的位置,然后封装层entry插入,但是,hashmap并没有做对应的线程安全处理。在多个线程进行put操作时,会将元素覆盖掉。为此,我们可以在对map操作的时候加锁,保证线程安全,但是这样会影响性能。推荐使用java Juc包下的ConcurrentHashMap,java在底层对它做了线程安全处理,并且降低了锁的粒度,只会锁对应的下标元素,不会对其他位置造成影响,既保证线程安全,有提高了性能。
发表于 2023-04-11 22:15:34
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
上传者:
real19931
难度:
31条回答
126收藏
5174浏览
热门推荐
相关试题
体育课测验(二)
广度优先搜索(BFS)
拓扑排序
dfs
评论
(2)
游戏内数据分析涉猎的少,如何证明自...
评论
(1)
之前的经历中单品数据分析的经验丰富...
评论
(1)
什么样的人适合做数据分析
评论
(1)
2022 诺瓦科技 Perl re...
perl
System Verilog
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题