ThreadLocal(2) - FastThreadLocal
FastThreadLocal
该类位于netty的util包下,netty的线程都使用的是FastThreadLocal而不是jdk的ThreadLocal
jdk的ThreadLocal使用Thread类的ThreadLocalMap
netty的FastThreadLocal使用FastThreadLocalThread的InternalThreadLocalMap
netty的FastThreadLocal相当于是ThreadLocal的空间换时间版本
类概述
- ThreadLocal的一种特殊变体,在从FastThreadLocalThread访问时产生更高的访问性能
- 使用数组中的常量索引来查找变量,而不是使用哈希码和哈希表
- 频繁访问效率更高
- 需要搭配FastThreadLocalThread使用
FastThreadLocal<V>
成员变量
private final int index
所在线程(FastThreadLocalThread)的map(InternalThreadLocalMap)中的数组下标
实例化时通过 InternalThreadLocalMap.nextVariableIndex()
方法生成
其他方法
对应jdk的ThreadLocal类
jdk的ThreadLocal通过调用Thread上的ThreadLocalMap来操作
netty的FastThreadLocal通过调用FastThreadLocalThread上的InternalThreadLocalMap来操作
FastThreadLocalThread
继承自Thread类,也就是说,此类也可以使用jdk的ThreadLocal
netty是通过Thread是否是FastThreadLocalThread来选择用哪个ThreadLocal
成员变量
private InternalThreadLocalMap threadLocalMap
类似于jdkThread的ThreadLocalMap
其他方法
提供一些公开构造方法
InternalThreadLocalMap
FastThreadLocal最终存储的地方,类似于Thread的ThreadLocalMap
静态变量
private static final ThreadLocal<InternalThreadLocalMap> slowThreadLocalMap = new ThreadLocal<InternalThreadLocalMap>()
netty在InternalThreadLocalMap加了一个jdk的ThreadLocal
说明可以在Thread的线程局部变量中获取,相当于在非FastThreadLocalThread线程也可以使用InternalThreadLocalMap,只不过这个mao
是存储在Thread上,而不是FastThreadLocalThread
成员变量
private Object[] indexedVariables
线程本地变量最终存储的位置
此外netty还加了一些常用的线程局部变量
// 主要线程变量
private int futureListenerStackDepth;
private int localChannelReaderStackDepth;
private Map<Class<?>, Boolean> handlerSharableCache;
private IntegerHolder counterHashCode;
private ThreadLocalRandom random;
private Map<Class<?>, TypeParameterMatcher> typeParameterMatcherGetCache;
private Map<Class<?>, Map<String, TypeParameterMatcher>> typeParameterMatcherFindCache;
// String相关
private StringBuilder stringBuilder;
private Map<Charset, CharsetEncoder> charsetEncoderCache;
private Map<Charset, CharsetDecoder> charsetDecoderCache;
// ArrayList相关
private ArrayList<Object> arrayList;
其他方法
提供了一些获取变量,删除变量,设置变量的方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律