证明hashmap有线程安全问题
举个场景,resize的过程中,会创建一个新的空数组,然后把老数据写入到新的数组里面去。如果在数据迁移之前有线程检索数据,可能得不到正确的结果
怎么解决线程安全问题,可以使用线程安全的hashmap。
hashtable是hashmap的线程安全版本;集合工具类也可以把hashmap转成线程安全的;concurrenthashmap是jdk并发包提供的线程安全的hashmap。
前两种解决方式大同小异,都是锁住整个容器,而且读写互斥。
我们比较推荐的concurrenthashmap则是通过缩小锁的粒度、并且读操作不加锁,提高了并发状态下的读写性能