诺尔雷顿
2020-05-07 13:18
如下:
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要这样设计,而不用我的这种写法?
HashMap。本身就不是线程安全的,所以 你这个写法 我暂时不确定 是不是能正确的运行
但是既然不是线程安全的 所以 我觉得 不可以这样写
如果你加个锁 确实可以 变成安全的 操作
但是就会 变成多线程 竞争锁 非常消耗性能
虽然实现了 类似功能 但是性能 太低
所以JDK 不会这样设计
如果不是static,你怎么知道你存到哪里(哪个实例的变量里)了呢
ThreadLocal
14173 学习 · 32 问题
相似问题