多个线程同时往一个HashMap里put数据的时候会出问题吗?

Lucare 发布于 2016/09/24 12:14
阅读 1K+
收藏 0

RT,put的key不可能相同,还会出问题吗,需要用ConcurrentHashmap吗?

直接put到一个静态的公共HashMap和从redis中取出的一个Hashmap有所不同吧?


加载中
1
kakai
kakai
HashMap线程不安全,建议多线程下还是用ConcurrentHashmap吧
0
ksfzhaohui
ksfzhaohui
hashmap线程不安全,会出现值被覆盖;redis本身是单线程的,直接取一个hashmap是不会有问题的
0
GameKing
GameKing

只是读的话,没有问题....并发读写的话最严重的情况是出现空间调整,数据的索引位置发生改变,引发部分线程死循环,cpu跑高,应用上天。

不单是hashmap,像treeset这类非线程安全的集合类,都存在类似情况。

GameKing
GameKing
回复 @Lucare : 指的是把hashmap序列化后存入redis还是利用redis自身的key-value来存?如果是前者的话,不行,并发写会互相覆盖,额外加锁不可取。后者的话可以,看你们的业务怎么设计了﹉
Lucare
Lucare
那我这个put可能会出问题咯,但是如果我从redis里面取的这个hashmap,每个线程进来时都是从redis拿map,然后put,我感觉不会出问题。
0
kakai
kakai
Collections.synchronizedSet(非线程安全的Set)
        Collections.synchronizedMap(非线程安全的Map)

        Collections.synchronizedList(非线程安全的List)

调用上面的就能把非线程安全的东东变为线程安全的

Lucare
Lucare
不是不知道怎么变线程安全,我是问会不会带来线程安全的问题
0
lindent
lindent
都是往里写没事,不要有人迭代,有些往里写就会出错
Lucare
Lucare
好的
返回顶部
顶部