论坛首页 Java企业应用论坛

理解和讨论HashMap的线程安全

浏览 37109 次
精华帖 (1) :: 良好帖 (10) :: 新手帖 (14) :: 隐藏帖 (3)
作者 正文
   发表时间:2010-05-01   最后修改:2010-05-01
小结一下:remove与put都是一样的,由于大家拿到的不是最新链头,只要大家在Entry数组的index相同时(经过hash后的index),就有可能出现后一个覆盖前一个的操作,即前一个的操作无效。
可能产生的现象会是:
1)put进行的data有可能丢失了
2)一些通过remove(Object key)删除掉的元素(返回删除成功)又出来了。
3)多线程检测到HashMap容量超过负载因子时会进行多次的resize,由于要rehash,所以消耗的性能也是巨大的。

但如果put、与remove,是在同一条线程中处理,而get发生在多线程环境,是不会出现上述3种情况或抛出ConcurrentModificationException的。唯一可能出现的是返回不是最新的数据(可能拿到刚好被remove的,拿不到刚好put进去的),但这种情况即使ConcurrentHashMap也会出现。但ConcurrentHashMap的get方法多了一步处理,看起来好像更精确.后面的详细内容请看主题贴,已经更新到后面:-)
0 请登录后投票
   发表时间:2010-05-02  
别误导他人啊。 最可恨的是半对半错的结论。
0 请登录后投票
   发表时间:2010-05-02  
sdh5724 写道
别误导他人啊。 最可恨的是半对半错的结论。

错的地方或者你觉得有问题的地方可以指出来,只是讨论一下
0 请登录后投票
   发表时间:2010-05-02   最后修改:2010-05-02
作为成员变量·多线程下,数据就可能不一致
0 请登录后投票
   发表时间:2010-05-03  
参看fast fail机制
0 请登录后投票
   发表时间:2010-05-05  
楼主,学习了。正准备多线程下使用hashmap。嘿嘿!!现在会想其他方式解决问题。还有就是有点替楼主抱不平,以学习的心态探讨一下,结果还被说成误导他人。欣赏楼主乐观的心态,也学习了。小妹,佩服
0 请登录后投票
   发表时间:2010-05-06  
gufenglian 写道
楼主,学习了。正准备多线程下使用hashmap。嘿嘿!!现在会想其他方式解决问题。还有就是有点替楼主抱不平,以学习的心态探讨一下,结果还被说成误导他人。欣赏楼主乐观的心态,也学习了。小妹,佩服


谢谢:-)呵呵,多交流
0 请登录后投票
   发表时间:2010-05-06  
嗯嗯...因为那是校长说的..所以有些道理
0 请登录后投票
   发表时间:2010-12-28  
支持楼主的探索精神,不过写的确实太乱了。
0 请登录后投票
   发表时间:2011-02-11  
HashMap高并发确实有问题
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics