ConcurrentHashMap是否在get方法上是否有锁
时间: 2023-12-15 10:32:13 浏览: 73
java中ConcurrentHashMap的读操作为什么不需要加锁
5星 · 资源好评率100%
ConcurrentHashMap在正常情况下,get()方法是不需要加锁的。这也是它比其他并发集合,如Hashtable、用Collections.synchronizedMap()包装的HashMap效率高的原因之一。正常情况下,get()方法全程不需要加锁是因为访问的大多数变量是volatile关键字修饰的,比如Node.val、Node.next、count,volatile保证了其值的修改对其他线程的可见性。在多线程环境下,线程A修改Node节点的val或者新增节点对线程B是可见的。像引用类型:数组table用volatile修饰,在数组扩容的时候就保证了其引用的改变对其他线程的可见性。get方法相对就很简单,根据Hash计算出segment的位置判断是否为空,判断链表是否为空,然后进行遍历链表根据查找到返回,没有返回null即可。
阅读全文