为何HashMap是线程不安全的?如何线程安全的使用HashMap?多并发状况下HashMap是否还会产生死循环?

为何HashMap是线程不安全的?安全

HashMap在并发执行put操做时会引发死循环,致使CPU利用率接近100%。由于多线程会致使HashMap的Node链表造成环形数据结构,一旦造成环形数据结构,Node的节点就永远不为空,就会在获取Node的时候产生死循环。数据结构

如何线程安全的使用HashMap?多线程

HashTable是线程安全的,效率慢,慢在那个方面呢?——主要就是在put和get方法时,须要等待锁。并发

线程安全的使用HashMap的意义在于,提升访问的效率;又要线程安全,又要提升效率的方法有两个,一个是Synchronized、一个是ConcurrentHashMap;Synchronized整体上比ConcurrentHashMap差一点,因此主要是使用ConcurrentHashMap来实现线程安全。.net

多并发状况下HashMap是否还会产生死循环?线程

新版本的JDK8改进以后修复了HashMap在多并发的状况下不会产生死循环的问题,但又出现了数据丢失的问题(参考:https://blog.csdn.net/u010412719/article/details/52049347blog

相关文章
相关标签/搜索