HashMap多线程不安全
来源:互联网 发布:switch case语句 php 编辑:程序博客网 时间:2024/05/16 07:22
事故分析
最近一次web工程上线,上线大概半个小时,出现了报警,16核的服务器的cpu使用了1123%,程序出异常了。
Cpu利用率过高一般是因为出现了出现了死循环,导致部分线程一直运行。占用cpu时间。使用jstack工具dump出问题的那台服务器的栈信息。死循环的话,首先查找RUNNABLE的线程,找到问题代码如下:
Java.lang.Thread.State:RUNNABLE at java.util.HashMap.get(HashMap.java:303)atcom.sohu.twap.service.logic.TransformTweeter.doTransformTweetT5(TransformTweeter.java:183)共出现了23次。java.lang.Thread.State:RUNNABLE at java.util.HashMap.put(HashMap.java:374) atcom.sohu.twap.service.logic.TransformTweeter.transformT5(TransformTweeter.java:816)
共出现了3次。
上面的栈信息显示有三个线程在对HashMap进行put操作,
问题就这样引起了,HashMap是非线程安全的,多个线程put的时候造成了某个key值Entry key List的死循环,问题就这么产生了。
当另外一个线程get 这个Entry List 死循环的key的时候,这个get也会一直执行。最后结果是越来越多的线程死循环,最后导致服务器dang掉。解决办法也很简单,就不多说了
我们一般认为HashMap重复插入某个值的时候,会覆盖之前的值,这个没错。但是对于多线程访问的时候,由于其内部实现机制,就可能出现安全问题了。正如<<并发编程实践>>所说,当某个类没有什么是线程安全的时候,就认为它是非线程安全的。
对HaspMap死循环原因分析
有人已经做出了分析,我就不在大费周章了。链接如下:
问题:http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html
分析:http://www.udpwork.com/item/2321.html
http://www.shaoqun.com/a/213108.aspx
0 0
- HashMap多线程不安全
- 1、关于HashMap在多线程下的不安全分析
- hashmap为什么线程不安全
- HashMap为什么线程不安全
- HashMap线程不安全问题
- java8 HashMap 线程不安全
- 为什么HashMap不安全
- HashMap线程不安全原因
- HashMap为什么线程不安全
- 一个验证HashMap在多线程环境下线程不安全的例子及dump分析
- hashmap线程不安全在哪里?
- HashMap线程不安全在哪里
- HashMap的线程不安全体现
- DateFormat的多线程不安全
- 多线程不安全函数
- 如何解决多线程不安全
- liboauth oauth_sign_url2多线程不安全问题
- SimpleDateFormat在多线程下不安全
- sql之left join、right join、inner join的区别
- PHP——AJAX 实时搜索
- studio 签名apk配置,方便第三方登录,支付等测试
- android中如何使用 XRecyclerView
- Log4Net使用详解(续)
- HashMap多线程不安全
- 阻塞与非阻塞 异步非阻塞
- 交互设计师必备书单
- UBUNTU的默认root密码是多少
- iOS中使用RSA加解密
- Heap block at 0075E6C8 modified at 0075E736 past requested size of 66
- 查看端口占用和杀死进程
- 使用Glide加载gif图
- pig简介