美文网首页
ThreadLocal实现简单总结

ThreadLocal实现简单总结

作者: lxian2shell | 来源:发表于2018-05-17 00:33 被阅读0次

    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)

    相关文章

      网友评论

          本文标题:ThreadLocal实现简单总结

          本文链接:https://www.haomeiwen.com/subject/jrjvdftx.html