线程不安全的原因
- HashMap底层是一个Entry数组,一旦发生Hash冲突的的时候,HashMap采用拉链法解决碰撞冲突.
- put方法也不是同步的
- 扩容的方法也不是同步的
参考:https://www.cnblogs.com/qiumingcheng/p/5259892.html
如何线程安全的使用
- Hashtable
- ConcurrentHashMap
- SynchronizedMap
####例子
1 | //Hashtable |
####性能对比
使用ExecutorService来并发运行5个线程,每个线程添加/获取500K个元素。
从数据可以看出,ConcurrentHashMap效率最高
代码如下
1 | package com.hisen.collection.map; |