金三银四精选java面试题-ThreadLocalMap的结构

发布时间:2024-01-01 19:16:43
 

ThreadLocalMap的结构

ThreadLocalMap虽然被称为Map,但是其实它是没有实现Map接口的,不过结构还是和HashMap比较类似的,主要关注的是两个要素:元素数组和散列方法

  • 元素数组一个table数组,存储Entry类型的元素,Entry是ThreadLocal弱引用作为key,Object作为value的结构。
private Entry[] table;
  • 散列方法就是怎么把对应的key映射到table数组的相应下标,ThreadLocalMap用的是哈希取余法,取出key的threadLocalHashCode,然后和table数组长度减一&运算(相当于取余)
int i = key.threadLocalHashCode & (table.length - 1);

补充一点每创建一个ThreadLocal对象,它就会新增0x61c88647,这个值很特殊,它是斐波那契数也叫黄金分割数。这样带来的好处就是hash分布非常均匀

private static final int HASH_INCREMENT = 0x61c88647;

private static int nextHashCode() {
    return nextHashCode.getAndAdd(HASH_INCREMENT);
}

 
上一篇 金三银四精选java面试题-ThreadLocal内存泄露是怎么回事?
下一篇 金三银四精选java面试题-ThreadLocalMap怎么解决Hash冲突的?

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题