57、Netty源码分析:InternalThreadLocalMap

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

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: