836. HashMap在多线程环境下使⽤需要注意什么?
要注意死循环的问题,HashMap的put操作引发扩容,这个动作在多线程并发下会发⽣线程死循环的问题。
- HashMap不是线程安全的;Hashtable线程安全,但效率低,因为是Hashtable是使⽤synchronized的,所有线程竞争同⼀把锁;⽽ConcurrentHashMap不仅线程安全⽽且效率⾼,因为它包含⼀个segment数组,将数据分段存储,给每⼀段数据配⼀把锁,也就是所谓的锁分段技术。
- HashMap为何线程不安全:
- put时key相同导致其中⼀个线程的value被覆盖;
- 多个线程同时扩容,造成数据丢失;
- 多线程扩容时导致Node链表形成环形结构造成.next()死循环,导致CPU利⽤率接近100%;
- ConcurrentHashMap最⾼效;