什么是Threadlocal
Threadlocal,本地线程变量,每个线程保留着一个共享变量的副本;
其中有一个静态内部类threadlocalmap,数据结构是个entry数组,其中entry继承自弱引用(所以在jvm中内存不足时就会被清理);
entry里面key是同一个线程关联的不同的threadlocal对象,value就是具体存放的对象数据;
get和set都是通过对threadlocal进行hash,其中以开放寻址法来解决hash冲突。
Netty如何扩展Threadlocal
Netty相比于Threadlocal,维护了一个InternalThreadLocalMap,数据结构是个存放value的object数组;
参照下图,Netty的高明之处在于直接在InternalThreadLocalMap[0]存放了一个SET,里面每个元素就是一个FastThreadLocal(和ThreadLocal相似)对象,每个FastThreadLocal在InternalThreadLocalMap的下标在FastThreadLocal加载时候确定,因此相比于ThreadLocal通过hash之后再寻址,netty直接使用数组下标寻址,高并发情况下性能得到显著提升。