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的分析结束,感谢阅读。