InternalThreadLocalMap
前面介绍PoolThreadLocalCache中了解到netty的线程缓存变量值是存在InternalThreadLocalMap中的,它相对于java原生的map优点在于使用数组来管理变量值而不是map,它的数据结构如下:

在它的变量中与PoolThreadLocalCache相关的为indexedVariables,其它的变量值有其它用途,本篇暂时不涉及。
构造函数
InternalThreadLocalMap的构造函数只对数组indexedVariables进行初始化,默认大小32,初始填充值为UNSET。

get()
InternalThreadLocalMap的构造函数为私有的,不对外开放,所以获取InternalThreadLocalMap的办法是调用get()方法,如果不存在则先进行初始化,如果是netty自有的线程FastThreadLocalThread则直接获取它的属性值,如果不是则从java原生的线程中获取。

setIndexedVariable()
向map中存值的时候,如果数组长度不够则先进行扩容,否则存放到index对应的位置。

expandIndexedVariableTableAndSet()
根据index来扩容,扩容后的数组长度为index向上最接近的2的幂次方。

indexedVariable()
根据index值从数组中获取值,与map的取值相比,它少了计算hashcode和从链表中读值的过程,效率来的要快一些。

removeIndexedVariable
根据index删除值。

至此,InternalThreadLocalMap的分析结束,感谢阅读。















![[零刻]EQ12EQ12Pro调整风扇转速教程](https://img-blog.csdnimg.cn/ac464d10447b4490aa98ceca04422a03.png)




