为什么threadLocalMap要设计为Static的双层map,如果设计为非静态的单层map有什么问题?
如下:
public class MyThreadLocal<T> {
/**
* key: threadId; value:存储内容
*/
private Map<Long, T> threadMap = new HashMap<>();
public void set(T data){
long threadId = Thread.currentThread().getId();
threadMap.put(threadId, data);
}
public T get(){
long threadId = Thread.currentThread().getId();
if (!threadMap.containsKey(threadId)) {
threadMap.put(threadId, initialValue());
}
return threadMap.get(threadId);
}
protected T initialValue(){
return null;
}
}我感觉这样已经完全能实现线程隔离的功能。
老师那种写法,是因为JDK设计threadLocalMap属于Thread的成员变量,所以才需要双重Map嵌套。
我的理解正确吗?如果正确的话,为什么JDK要这样设计,而不用我的这种写法?