ConcurrentHashMap与HashMap区别?

单线程下的

多线程环境下,HashMap 为什么会出现死循环?

线程一执行指向5
线程二完全做完了

接下来线程一继续处理9 发现next指向5

接下来处理5是发现线程二9是指向5的

这就形成循环引用

ConcurrentHashMap

  • java7 采用分段锁

  • java8 链表长度8后转行红黑树

总结不同点

  1. HashMap允许key和value 为空 ConcurrentHashMap不允许
  2. HashMap非线程安全ConcurrentHashMap线程安全
  3. 使用iterator遍历HashMap同时做修改操作的ConcurrentHashMap是允许该行为的并且这个更新对后面的遍历是可见的