java线程安全问题

08-12-29 windgoogle
1.做了个测试,使用HashMap ,多个线程做put get ,remove等操作,模拟类似tomcat存放session的数据结构

只是我在put,get remove时没有加同步锁,(线程不安全),用LR做压力测试,cpu很快就达到100%,但是令我不解的是

我停止LR测试时,cpu还是居高不下,即使过了2个多小时仍是如此,就跟程序进入了死循环一样,除非停止这个java程序,线程dump的信息,大多线程都是在对这个HashMap的get操作上,如果加上同步锁(线程安全),则没有以上问题

2.我不解的是,难道线程不安全会导致死循环?能不能有什么技术手段检测HashMap是否死循环?

    

1
windgoogle
2008-12-29 15:22
以上我修改tomcat代码做过测试,session操作是线程不安全的,只是tomcat cpu没有达到100%,但一直是50%,停止压力测试后,一直是50%,就跟上述说的现象类似

如果不是死循环,那是什么导致cpu一直保持不变呢?

[该贴被windgoogle于2008-12-29 16:23修改过]

IceQi
2008-12-29 22:22
在一个错误的过程中有时候很难找到一个合理的解释,因为不能确切的知道这个过程里都发生了什么。

windgoogle
2008-12-29 23:53
所以想找个办法,让这些不确切变得确切

ACoder
2008-12-30 09:02
hashmap map = new hashmap(X) //X是根据你的线程数量,尽可能的大,你试验一下。

猜你喜欢
4Go 1 2 3 4 下一页