诺尔雷顿
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
14042 学习 · 31 问题
相似问题