当前位置: 首页 > 后端技术 > Java

ConcurrentHashMap的Put操作

时间:2023-04-01 18:40:02 Java

由于put方法需要写入共享变量,为了线程安全,在操作共享变量时必须加锁。Put方法首先定位到Segment,然后在Segment中进行插入操作。插入操作需要经过两个步骤。第一步判断Segment中的HashEntry数组是否需要扩容。第二步,定位添加元素的位置,放入HashEntry数组中。  是否需要扩容。在插入元素之前,它会先判断Segment中的HashEntry数组是否超过了容量(阈值)。如果超过阈值,数组将被扩展。值得一提的是,Segment的扩容判断比HashMap更合适,因为HashMap是在插入元素后判断元素是否达到容量的。HashMap执行了无效扩展。  如何扩容。扩容时,会先创建一个容量为原容量两倍的数组,然后将原数组中的元素进行哈希运算,插入到新数组中。ConcurrentHashMap为了高效,并没有展开整个容器,只是展开了一段。