高并发编程之MapMaker
在我之前的文章中有介绍过这个类,这个类就是增强版的ConcurrentHashMap的工具类,经常出现在高并发场景中,我们先来研究一下MapMaker内部类
一、类声明与基础结构
package com.google.common.collect;import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
// ... 其他导入@ElementTypesAreNonnullByDefault
@GwtCompatible(emulated = true)
public final class MapMaker {
- 包声明:属于Guava集合框架的核心包
- 注解说明:
@GwtCompatible(emulated = true)表示该类支持GWT编译但需要模拟实现final修饰符表明该类不可被继承,符合工具类的设计原则
二、常量字段定义
private static final int DEFAULT_INITIAL_CAPACITY = 16;
private static final int DEFAULT_CONCURRENCY_LEVEL = 4;
static final int UNSET_INT = -1;
常量含义:
DEFAULT_INITIAL_CAPACITY=16:默认初始容量,与HashMap一致DEFAULT_CONCURRENCY_LEVEL=4:默认并发级别,控制并发更新线程数UNSET_INT=-1:特殊标记值,表示参数未被设置
三、配置字段详解
boolean useCustomMap;
int initialCapacity = -1;
int concurrencyLevel = -1;
@CheckForNull MapMakerInternalMap.Strength keyStrength;
@CheckForNull MapMakerInternalMap.Strength valueStrength;
@CheckForNull Equivalence<Object> keyEquivalence;
字段作用:
useCustomMap:标志位,决定是否使用自定义Map实现(如弱引用、过期时间等特性)initialCapacity:初始容量,-1表示使用默认值concurrencyLevel:并发级别,影响Segment数量keyStrength/valueStrength:控制键/值的引用强度(STRONG、WEAK、SOFT)keyEquivalence:
