锁定老帖子 主题:理解和讨论HashMap的线程安全
精华帖 (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方法多了一步处理,看起来好像更精确.后面的详细内容请看主题贴,已经更新到后面:-) |
|
返回顶楼 | |
发表时间:2010-05-02
别误导他人啊。 最可恨的是半对半错的结论。
|
|
返回顶楼 | |
发表时间:2010-05-02
sdh5724 写道 别误导他人啊。 最可恨的是半对半错的结论。
错的地方或者你觉得有问题的地方可以指出来,只是讨论一下 |
|
返回顶楼 | |
发表时间:2010-05-02
最后修改:2010-05-02
作为成员变量·多线程下,数据就可能不一致
|
|
返回顶楼 | |
发表时间:2010-05-03
参看fast fail机制
|
|
返回顶楼 | |
发表时间:2010-05-05
楼主,学习了。正准备多线程下使用hashmap。嘿嘿!!现在会想其他方式解决问题。还有就是有点替楼主抱不平,以学习的心态探讨一下,结果还被说成误导他人。欣赏楼主乐观的心态,也学习了。小妹,佩服
|
|
返回顶楼 | |
发表时间:2010-05-06
gufenglian 写道 楼主,学习了。正准备多线程下使用hashmap。嘿嘿!!现在会想其他方式解决问题。还有就是有点替楼主抱不平,以学习的心态探讨一下,结果还被说成误导他人。欣赏楼主乐观的心态,也学习了。小妹,佩服
谢谢:-)呵呵,多交流 |
|
返回顶楼 | |
发表时间:2010-05-06
嗯嗯...因为那是校长说的..所以有些道理
|
|
返回顶楼 | |
发表时间:2010-12-28
支持楼主的探索精神,不过写的确实太乱了。
|
|
返回顶楼 | |
发表时间:2011-02-11
HashMap高并发确实有问题
|
|
返回顶楼 | |