为什么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要这样设计,而不用我的这种写法?