拜读了GoldenDoc的大作:《Java并发编程之ConcurrentHashMap》后,有一个疑问:
关于查找Segment位置的位操作,segment的位置由如下代码确定:
long u = ((h >>> segmentShift) & segmentMask);
其中 SSHIFT 和 SBASE为静态常量,而segmentShift和segmentMask则是在构造函数中初始化的:
int sshift = 0; int ssize = 1; while (ssize < concurrencyLevel) { ++sshift; ssize <<= 1; } this.segmentShift = 32 - sshift; this.segmentMask = ssize - 1;
其中ssize是指的segment的个数,它是不小于concurrencyLevel的最小的2的幂,假设它是2^n,那segmentShift也就是 32-n,而segmentMask是 2^n-1。我们知道2^n-1在2进制中就是n位1,而Java的int型数据是32位。所以(h >>> segmentShift) 就是把h的最高n位移到最低n位,前32-n位为0。而segmentMask就是最低n位为1其他位为0的整数。这样(h >>> segmentShift)与(h >>> segmentShift) & segmentMask应该是一样的呀?为什么要多此一举呢?
相关推荐
在JDK 1.8版本中,`ConcurrentHashMap`中的`computeIfAbsent`方法存在一个潜在的死循环问题。这个bug主要出现在并发操作时,当`ConcurrentHashMap`需要进行扩容并且`computeIfAbsent`正在执行计算的过程中,可能会...
JDK1.8中ConcurrentHashMap中computeIfAbsent死循环bug问题 JDK1.8中ConcurrentHashMap中computeIfAbsent方法是一个非常重要的方法,它可以让开发者在键不存在时,提供一个默认值作为回应。但是,在JDK1.8中,这个...
`ConcurrentHashMap`是Java并发包(`java.util.concurrent`)中的一个重要组成部分,它提供了一个线程安全的哈希表实现。与传统的`Hashtable`相比,`ConcurrentHashMap`具有更高的并发性能,这主要得益于它的分段锁...
为了避免在扩容过程中锁住整个表,ConcurrentHashMap采用了特殊的扩容机制,确保即使在扩容过程中也能支持并发读写操作。 #### 四、应用场景 **1. 多线程环境下的数据共享** 当多个线程需要并发地访问和修改一个...
在Java编程语言中,`HashMap`和`ConcurrentHashMap`是两种非常重要的数据结构,它们都属于`java.util`包,用于存储键值对。本文将深入解析这两个类在Java 7和8版本中的实现原理、特点以及使用场景。 首先,`HashMap...
java本地缓存ConcurrentHashMap
在ConcurrentHashMap中,数据定位采用二次哈希策略。第一次哈希决定元素所属的Segment,第二次哈希确定元素在Segment内的位置,通常是链表的头部。这种方式虽然增加了查找元素的时间复杂度,但降低了锁的粒度,使得...
Segment继承自ReentrantLock,可以看作是ConcurrentHashMap中的锁。每个Segment守护着一个HashEntry数组,这些数组的长度是固定的。ConcurrentHashMap初始化时,通过initialCapacity、loadFactor和concurrencyLevel...
ConcurrentHashMap 广泛应用于 Java 开发中,例如,在大型的 Web 应用程序中,ConcurrentHashMap 可以用来存储用户的 Session 信息,在分布式系统中,ConcurrentHashMap 可以用来存储分布式锁等。
Java利用ConcurrentHashMap实现本地缓存demo; 基本功能有缓存有效期、缓存最大数、缓存存入记录、清理线程、过期算法删除缓存、LRU算法删除、获取缓存值等功能。 复制到本地项目的时候,记得改包路径哦~
源码分析见我博文:http://blog.csdn.net/wabiaozia/article/details/50684556
在Java 7和8中,HashMap和ConcurrentHashMap是两种重要的数据结构,分别用于非线程安全和线程安全的键值对存储。本篇文章将深入解析这两种数据结构的内部实现,帮助读者理解它们的工作原理。 HashMap是Java中最常用...
Java中遍历ConcurrentHashMap的四种方式详解 Java中遍历ConcurrentHashMap的四种方式详解是Java开发中一个非常重要的知识点。ConcurrentHashMap是Java中一种高效且线程安全的HashMap实现,它提供了高效的读写操作...
在Java面试中,经常会问到关于数据结构如HashTable和ConcurrentHashMap的细节,以及它们在并发编程中的使用。 最后,文档中出现了诸如“2399”、“1328”、“2645”、“2633”等数字,很可能是引用了一些代码片段或...
在Java的并发编程中,ConcurrentHashMap 是一个非常重要的组件,它提供了线程安全的HashMap实现。本文将深入探讨 ConcurrentHashMap 的内部实现原理,并通过代码示例展示其使用方法和优势。 通过本文,我们深入探讨...
`ConcurrentHashMap`是Java并发编程中非常重要的一个数据结构,它是线程安全的HashMap实现。在理解`ConcurrentHashMap`的实现原理之前,我们先来看看哈希表的基本概念。 哈希表是一种键值对存储的数据结构,通过键...