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);
}
}
本文深入解析了ThreadLocal的工作原理及其实现细节,包括其内部的ThreadLocalMap结构及其存储和检索机制。同时提供了一个ThreadLocalCache的具体实现案例。
10万+

被折叠的 条评论
为什么被折叠?



