HashMap为什么不安全?

具体原因:某个线程执行过程中,被挂起,其他线程已经完成数据迁移,等CPU资源释放后被挂起的线程重新执行之前的逻辑,数据已经被改变,造成死循环、数据丢失。

hashmap中所有函数 没有去检查在其它线程中的使用情况下就进行操作了。

JDK7中,由于多线程对HashMap进行扩容,调用了HashMap,当某个线程执行过程中,被挂起,其他线程已经完成数据迁移,等CPU资源释放后被挂起的线程重新执行之前的逻辑,数据已经被改变,造成死循环、数据丢失。

因为在jdk7中,在多线程环境下,扩容时会造成环形链或数据丢失、死循环。因为是链表结构,那么就很容易形成闭合的链路,这样在循环的时候只要有线程对这个HashMap进行get操作就会产生死循环。

我们知道hashmap在多线程下是不安全的,那么为什么不安全,这个原因是什么呢。其实核心原因在于扩容的时候多线程的参与会造成前后节点之间相互引用,造成链环,下面我们就分析下这个是怎么产生的。

hashmap和hashtable哪个是线程安全的

1、HashMap是线程不安全的,在多线程并发的环境下,可能会产生死锁Q等问题,因此需要开发人员自己处理务线程的安全问题,Hashtable是线程安全的,它的每个 *** 上都有synchronized关键字,因此可直接用于多线程中。

2、HashTable是同步( *** 中使用了Synchronize)的;而HashMap是未同步( *** 中缺省Synchronize)的。

3、HashMap不是线程安全的,HashTable是线程安全。HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。null不同 ashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

4、两者最主要的区别在于hashtable是线程安全,而hashmap则非线程安全。

hashmap和concurrenthashmap哪个是线程安全的,为什么线程安全

1、更大的区别就是ConcurrentHashMap是线程安全的,hashMap不是线程安全的。

2、HashMap不是线程安全的,而ConcurrentHashMap是线程安全的。ConcurrentHashMap采用锁分段技术,将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在。

3、HashMap不是线程安全的,而ConcurrentHashMap是线程安全的。

4、而 ConcurrentHashMap 是线程安全的 *** 容器,特别是在多线程和并发环境中,通常作为 Map 的主要实现。除了线程安全外,他们之间还有一些细微的不同,本文会介绍到。

关于hashmap线程安全和hashmap线程安全吗,在什么时候会线程不安全的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。