- ThreadLocal 内部其实是用 Map 集合来保存数据.其中键为当前线程.
- ThreadLocal 类只有三个方法:
void set(T value)
: 保存值;T get()
: 获取值;void remove()
: 移除值;
// 模拟实现 ThreadLocalclass MyThreadLocal{ private Map map = new HashMap (); public void set(T data){ // 使用当前线程做键 map.put(Thread.currentThread(),data); } public T get(){ return map.get(Thread.currentThread()); } public void remove(){ map.remove(Thread.currentThread()); }}// 示例: public void fun(){ final ThreadLocal tl = new ThreadLocal (); tl.set("hello"); // 匿名内部类来取值 new Thread(){ public void run(){ System.out.println("内部类:" + tl.get()); // 输出结果为 null, 因为线程不同 } }.start(); }
参考资料: