先说说它俩的区别吧
大家都是知道的,hashMap是不安全的,hashTable是安全的。
后来有了ConcurrentHashMap这个东西来保证hashMap的安全。
其实其原理是,分桶的hashTable而已,是分成多个区域。
根据hash值,算出其属于哪部分的hash。然后再放入,并且加锁。
hashMap会出现什么问题呢?
有一个很特别的问题,死循环。
当多线程并发的时候,在hashMap进行扩容,并且其中某个节点上是有不止一个元素,已经形成了一个链的时候。 会出现问题。
当元素在复制到新的节点时,链表上的元素要一个一个拆下来放到新的数组上的指定位置上。因为并发,有可能形成了两个新的数组,然后在对元素操作的时候,可能会形成闭环,造成死循环。