总所周知,HashMap是线程不安全的,CurrentHashmap和HashTable是线程安全的,那为啥HashMap是线程不安全的呢?有些小伙伴肯定会说因为HashMap没有被syschronized修饰,这句话没有毛病,但是面试官肯定不想听到这个答案。正确的回答是:
1、在1.7版本的时候HashMap在多线程的情况下,当HashMap需要扩容的时候会出现数据丢失和造成死循环(生成环形链)
2、在1.8版本的时候HashMapp在多线程的情况下,当HashMap put数据的时候可能会出现数据覆盖问题。比如:两个线程A,B同时put数据,这时候计算出的hashCode值相等,然后到了最后一步插入数据的时候,其中A线程让出了CPU的执行时间,B线程直接把数据存入到map里面。然后这时A线程获取到了CPU执行时间时,因为之前已经进行了hash碰撞了,就不会再次去进行hash碰撞处理hashCode值相同的情况。所以这个时候A线程直接覆盖B线程的数据,这样就导致了B线程的数据被覆盖了