首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试阿里被质问:ConcurrentHashMap线程安全吗

技术言论虽然自由,但面对魔鬼面试官时,我们更在乎的是这些真的正确吗? 线程重用导致用户信息错乱 生产环境中,有时获取到的用户信息是别人的。...我们都知道ConcurrentHashMap是个线程安全的哈希表容器,但它仅保证提供的原子性读写操作线程安全。...开发人员误以为使用ConcurrentHashMap就不会有线程安全问题,于是不加思索地写出了下面的代码:在每一个线程的代码逻辑中先通过size方法拿到当前元素数量,计算ConcurrentHashMap...ConcurrentHashMap对外提供能力的限制: 使用不代表对其的多个操作之间的状态一致,是没有其他线程在操作它的。...ConcurrentHashMap提供了一些原子性的简单复合逻辑方法,用好这些方法就可以发挥其威力。

86930
您找到你想要的搜索结果了吗?
是的
没有找到

面试系列之-ConcurrentHashMap实现原理(JAVA基础)

concurrentHashMap与hashMap concurrentHashMap用 transient volatile Node[] table修饰,使用volatile来保证某个变量内存的改变对其他线程即时可见...是线程安全的; HashMap不支持并发操作,没有同步方法,ConcurrentHashMap支持并发操作,通过继承 ReentrantLock(JDK1.7重入锁)/CAS和synchronized(...; 在jdk1.8里面ConcurrentHashMap锁的粒度,是数组中的某一个节点,而在jdk1.7里面。...concurrentHashMap 1.7的实现 JDK1.7中ConcurrentHashMap采用的就是分段锁,就是把整个table分割为n个部分,每个部分就是一个Segment;每个Segment...1.8的实现 JDK1.8中的ConcurrentHashMap实现,完全重构了JDK1.7,不再使用分段锁,而是给数组中的每个头节点都加锁,并且用的是synchronized。

22030

面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别

Java5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。 HashMap基于哈希思想,实现对数据的读写。...HashTable和ConcurrentHashMap的区别?...使用 ConcurrentHashMap,其底层采用分段的数组+链表实现,线程安全,通过把 Map 分为 N 个 Segment(部分),可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。...之所以效率低主要是使用了 synchronized 关键字对 put 等操作进行加锁,而 synchronized 关键字加锁是对整张 Hash 表的,即每次锁住整张表让线程独占,致使效率低下,而 ConcurrentHashMap...表划分为多个分段;而每个Segment元素,即每个分段则类似于一个Hashtable;这样,在执行put操作时首先根据hash算法定位到元素属于哪个Segment,然后对该Segment加锁即可,因此, ConcurrentHashMap

79210

面试中的HashMap、Hashtable和ConcurrentHashMap,你知道多少?

前言 学过数据结构的读者们想必其实也都学过HashMap,面试官问你的时候,想来你都是很清楚的知道HashMap是怎样的一个构成?确实很简单,就是数组加链表嘛。...如果知道红黑树,那就能答出来;不知道的话那不是就凉了,因为这个时候连ConcurrentHashMap都需要放弃回答了!!!...ConcurrentHashMap就线程安全的性能优化 说到ConcurrentHashMap,其实他和HashMap一样都是存在JDK1.8前后的版本差异的。...总结 其实总体来说就是性能上是HashMap > ConcurrentHashMap > Hashtable ,考虑上线程安全以后ConcurrentHashMap > Hashtable 。...也就是基于这些原因才会出现后来我们在使用ConcurrentHashMap出现来替代Hashtable的情况。

34340

《吊打面试官》系列-ConcurrentHashMap & Hashtable(文末送书)

于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写互联网技术栈面试相关的文章,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer...美丽迷人的面试官您好,一般在多线程的场景,我都会使用好几种不同的方式去代替: 使用Collections.synchronizedMap(Map)创建线程安全的map集合; Hashtable ConcurrentHashMap...不按照套路出牌呀,正常不都是问HashMap和ConcurrentHashMap么,这次怎么问了这个鬼东西,还好我饱读诗书,经常看敖丙的《吊打面试官》系列,不然真的完了。...总结 Hashtable&ConcurrentHashMap跟HashMap基本上就是一套连环组合,我在面试的时候经常能吹上很久,经常被面试官说:好了好了,我们继续下一个话题吧哈哈。...…… 加分项 在回答Hashtable和ConcurrentHashMap相关的面试题的时候,一定要知道他们是怎么保证线程安全的,那线程不安全一般都是发生在存取的过程中的,那get、put你肯定要知道

75130

学习Java基础知识,打通面试关九~ConcurrentHashMap

在上一篇文章中我们说到了Map集合中的一部分内容,还有并发包中的Map并没有说到,现在我们来说下并发包中的Map~ConcurrentHashMap。...Java8之前的ConcurrentHashMap 实现 在前期中ConcurrentHashMap的基本实现思路: ConcurrentHashMap 采用的是分段锁的设计方案,只有在同一个分段内的数据才会存在竞争关系...ConcurrentHashMap 也存在扩容的问题,这个跟HashMap类似,但是不是针对的整个ConcurrentHashMap,而是单独对Segment进行扩容。也会遇到同样的操作错误。...Java8的ConcurrentHashMap实现 在实现上放弃的Segment 的实现,采用了Node +CAS + Synchronized 来保证并发的安全。...ConcurrentHashMap 中操作的时候key value 不能是null 这样会出现操作问题。 初始化方法时使用的initTable,在调用的时候进行参数的设置。

41620

深入解析 ConcurrentHashMap 实现内幕,吊打面试官?没问题

ConcurrentHashMap 在 JDK 1.7 中的实现 在 JDK 1.7 版本及之前的版本中,ConcurrentHashMap 为了解决 HashTable 会锁住整个 hash 表的问题...JDK1.7 中,ConcurrentHashMap 的整体结构可以描述为下图的样子: [ConcurrentHashMap 1.7 存储结构] 我们对 ConcurrentHashMap 最关心的地方莫过于如何解决...JDK1.8 中的 ConcurrentHashMap 结构如下图所示: [JDK1.8 ConcurrentHashMap 结构图] 在这里我提一下 ConcurrentHashMap 默认构造函数,...我觉得这个地方比较有意思,ConcurrentHashMap 的默认构造函数如下: public ConcurrentHashMap() { } 发现没这个构造函数啥事没干,为啥要这样设计?...[] nt = (ConcurrentHashMap.Node[])new ConcurrentHashMap.Node<?

45530

ConcurrentHashMap源码(二)

return sum; } (1)元素的个数依据不同的线程存在在不同的段里; (2)计算CounterCell所有段及baseCount的数量之和; (3)获取元素个数没有加锁; 总结 (1)ConcurrentHashMap...是HashMap的线程安全版本; (2)ConcurrentHashMap采用(数组 + 链表 + 红黑树)的结构存储元素; (3)ConcurrentHashMap相比于同样线程安全的HashTable...,效率要高很多; (4)ConcurrentHashMap采用的锁有 synchronized,CAS,自旋锁,分段锁,volatile等; (5)ConcurrentHashMap中没有threshold...元素个数的更新如果还是出现多个线程同时更新一个段,则会扩容段(CounterCell); (17)获取元素个数是把所有的段(包括baseCount和CounterCell)相加起来得到的; (18)查询操作是不会加锁的,所以ConcurrentHashMap...不是强一致性的; (19)ConcurrentHashMap中不能存储key或value为null的元素; ConcurrentHashMap中有哪些值得学习的技术呢?

66120
领券