HashMap的同步操作

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值