欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ThreadLocal 简单分析

程序员文章站 2022-07-12 18:39:37
...

 

   ThreadLocal<T> 是一个泛型类

   protected T initialValue() {   return null;  }// 用于初始化 

   private final ThreadLocal<Map<Object, Object>> store;

    public ThreadLocalCache(URL url) {
        this.store = new ThreadLocal<Map<Object, Object>>() {
            @Override
            protected Map<Object, Object> initialValue() {
                return new HashMap<Object, Object>();
            }
        };
    }

 

  ThreadLocal 里面有一个ThreadLocalMap class,这个Map通过 Thread的 threadLocalHashCode和nextHashCode 值算出 hashCode 

 

  Thread存储一个字段:保存了ThreadLocalMap 

   t.threadLocals = new ThreadLocalMap(this, firstValue);  // this = ThreadLocal实例

   

   ThreadLocalMap 取值判断

   private Entry getEntry(ThreadLocal key) {
            int i = key.threadLocalHashCode & (table.length - 1);
            Entry e = table[i];
            if (e != null && e.get() == key) // 不同的ThreadLocal 即使hashCode一样 也不会取到相同的值   
               return e;
            else 
                return getEntryAfterMiss(key,i,e); 

 

    ThreadLocal的remove get set 其实就是对Thread实例的字段操作

 

 附: 别人的代码  

public class ThreadLocalCache implements Cache {

    private final ThreadLocal<Map<Object, Object>> store;

    public ThreadLocalCache(URL url) {
        this.store = new ThreadLocal<Map<Object, Object>>() {
            @Override
            protected Map<Object, Object> initialValue() {
                return new HashMap<Object, Object>();
            }
        };
    }

    public void put(Object key, Object value) {
        store.get().put(key, value);
    }

    public Object get(Object key) {
        return store.get().get(key);
    }

}

 

 

 

 

相关标签: java thread