ThreadLocal实现简单总结

ThreadLocal

在Thread 上保存了一个ThreadLocalMap,以ThreadLocal object 的hash 为key, thread local object 保存的值为value.

Thread.threadLocals --->  ThreadLocalMap<ThreadLocalHash, value>

ThreadLocal.get()  ----> cur_thread.threadLocals.get(cur_thrd_local_hash)

ThreadLocal.set() ----> cur_thread.threadLocals.set(cur_thrd_local_hash, value)

ThreadLocal细节

  • ThreadLocalMap size 为 2 ^ n. rehash 阈值为2/3, resize 为3/4
  • ThreadLocalMap 使用线性探测实现
  • Entry 中对于threadlocal 使用弱引用,避免threadlocal 内存泄漏
        static class Entry extends WeakReference<ThreadLocal<?>> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal<?> k, Object v) {
                super(k);
                value = v;
            }
        }
  • 当entry 中的threadlocal 变为null时,应当将此entry 回收。会在set/get过程中尝试清除这样的entry (并将这个entry 后面的entry rehash)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容