HashMap是大家很常用的一个Map,所以都认为他是很好用的一个Map,也就不去想他是否存在一些不合理的地方,像我刚刚看到这个错误的时候,我也是直接忽略掉,但是根据后来的详细了解,发现了HashMap的一些问题,在一些情况下是不能使用的。
首先HashMap是个非线程安全的函数,我们做web项目,一个请求进来,其实就相当于一个线程了,当很多线程对一个Hashmap又put又get的时候,CPU会很不稳定,因为每Put一次都会对map扩容一次,并且多多线程操作的时候,会有冲突.
所以解决办法有两个,我现在是用的第一个
1.将hashMap换成ConcurrentHashMap ,ConcurrentHashMap是线程安全的一个函数,并且执行效率挺高
2.在使用map的get或者put的时候,加上synchronized 同步块,这样可以导致多线程的冲突,大家都知道 一般加了synchronized 都需要排队执行的,所以执行效率比较低
1.key 为 String类型的时候,concurrenthashmap 比 hashMap 更快!
2.key 为int类型的时候比Key为String的要快很多!因为String的话 java还会对他做下hashcode的操作,所以如果key能放int 尽量放int
转载于:https://my.oschina.net/huichen/blog/418867