Map源码解析之ThreadLocalMap

Map源码解析之HashMap
Map源码解析之HashMap红黑树
Map源码解析之HashMap补充:集合、迭代器、compute、merge、replace
Map源码解析之LinkedHashMap
Map源码解析之TreeMap
Map源码解析之HashTable
Map源码解析之ConcurrentHashMap(JDK1.8)(一)
Map源码解析之ConcurrentHashMap(JDK1.8)(二)
Map源码解析之ConcurrentHashMap(JDK1.7)

ThreadLocalMap虽然并没有实现java.util.Map接口,但其也是由键值对组成的map结构,本文将针对ThreadLocalMap进行解析。

一、简介

ThreadLocalMap是ThreadLocal的静态内部类,key值为线程本地变量,value值为线程本地变量的值。
ThreadLocalMap的数据结构是一个用数组表示的环,数组长度必须是2的次幂,同样通过hash方式确定节点在数组中的下标(hash值是ThreadLocal的递增变量,而不是hashcode值),对于hash冲突的情况,采用线性探测法,直接将元素防止对应下标后面的下一个空闲单元。
ThreadLocalMap的key采用的是弱引用WeakReference,因此在使用过程中还需要注意及时清理key已经被gc回收的节点,及时释放无效空间。

二、属性

/**
* The initial capacity -- MUST be a power of two.
*/
//初始容量,2的次幂
private static final int INITIAL_CAPACITY = 16;

/**
* The table, resized as necessary.
* table.length MUST always be a power of two.
*/
//节点数组
private Entry[] table;

/**
* The number of entries in the table.
*/
//节点数量
private int size = 0;

/**
* The next size value at which to resize.
*/
//阈值,容量的2/3
private int threshold; // Default to 0

三、Entry类

Entry是ThreadLocalMap的内部类,用来表示其中的节点,继承了弱引用WeadReference<ThreadLocalMap>类。

static class Entry extends WeakReference<ThreadLocal<?>> {
    /** The value associated with this ThreadLocal. */
    Object value;

    Entry(ThreadLocal<?> k, Object v) {
        super(k);
        value = v;
    }
}

四、构造方法

1. ThreadLocalMap#ThreadLocalMap(ThreadLocal<?>, Object)

ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {
    table = new Entry[INITIAL_CAPACITY];
    int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);
    table[i] = new Entry(firstKey, firstValue);
    size = 1;
    setThreshold(INITIAL_CAPACITY);
}

根据第一个节点的key和value初始化map。
初始化数组,确定节点再数组的下标,初始化table[i],设置size和threshold。
进行散列的hash值是ThreadLocal的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值