首页 > 其他分享 >ThreadLocal(2) - FastThreadLocal

ThreadLocal(2) - FastThreadLocal

时间:2022-12-13 14:37:25浏览次数:42  
标签:netty FastThreadLocal InternalThreadLocalMap FastThreadLocalThread private Threa

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;

其他方法

提供了一些获取变量,删除变量,设置变量的方法

标签:netty,FastThreadLocal,InternalThreadLocalMap,FastThreadLocalThread,private,Threa
From: https://www.cnblogs.com/carry1899/p/16978657.html

相关文章

  • ThreadLocal实现原理和使用场景
    ThreadLocal是线程本地变量,每个线程中都存在副本。实现原理:每个线程中都有一个ThreadLocalMap,而ThreadLocalMap中的key即是ThreadLocal。  内存泄漏:ThreadLocal......
  • 【Java】ThreadLocal 可以在指定线程内存储数据,只有指定线程可以得到存储数据
     一般事务会用到 ThreadLocal可以保障同一个线程用同一个Connection 可以参考 ThreadLocal是线程的内部存储类,可以在指定线程内存储数据。只有指定线程可以得到存储......
  • day36-ThreadLocal
    ThreadLocal线程数据共享和安全1.什么是ThreadLocal?ThreadLocal的作用,可以实现在同一个线程数据共享,从而解决多线程数据安全问题当http请求发送到Tomcat服务端时,Tom......
  • ThreadLocal<T> (1)
    ThreadLocal<T>概述此类提供线程局部变量每个线程都有自己的、独立初始化的变量副本ThreadLocal实例通常是类中的私有静态字段在一个线程消失后,它的所有线程本地实例......
  • ThreadLocal
    ThreadLocal是什么从名字我们就可以看到ThreadLocal叫做本地线程变量,意思是说,ThreadLocal中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal......
  • ThreadLocal 详解
    ThreadLocal详解ThreadLocal简介ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量......
  • ThreadLocal怎么说
    目录ThreadLocal怎么说这么说ThreadLocal怎么说这么说ThreadLocal可以实现资源的线程隔离,避免线程安全问题ThreadLocal实现了线程内的资源共享其原理是,每个线程内有......
  • ThreadLocal 和 synchornized 两者的区别
    packagecom.itheima.hello.runnable;importjava.util.Random;publicclassThreadDemo1implementsRunnable{   privateintcount=0......
  • 01-InheritableThreadLocal和TransmittableThreadLocal
    01-InheritableThreadLocal和TransmittableThreadLocal1.ThreadLocal存在的问题publicclassTheadTest{privatestaticfinalThreadLocal<String>THREAD_LOCAL......
  • java ThreadLocal 内存泄露
    原文:https://zhuanlan.zhihu.com/p/56214714 前言ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之......