836. HashMap在多线程环境下使⽤需要注意什么?

要注意死循环的问题,HashMap的put操作引发扩容,这个动作在多线程并发下会发⽣线程死循环的问题。

  1. HashMap不是线程安全的;Hashtable线程安全,但效率低,因为是Hashtable是使⽤synchronized的,所有线程竞争同⼀把锁;⽽ConcurrentHashMap不仅线程安全⽽且效率⾼,因为它包含⼀个segment数组,将数据分段存储,给每⼀段数据配⼀把锁,也就是所谓的锁分段技术。
  2. HashMap为何线程不安全:
    1. put时key相同导致其中⼀个线程的value被覆盖;
    2. 多个线程同时扩容,造成数据丢失;
    3. 多线程扩容时导致Node链表形成环形结构造成.next()死循环,导致CPU利⽤率接近100%;
    4. ConcurrentHashMap最⾼效;