ThreadLocal

  1. ThreadLocal 内部其实是用 Map 集合来保存数据.其中键为当前线程.
  2. ThreadLocal 类只有三个方法:
    • void set(T value): 保存值;
    • T get(): 获取值;
    • void remove(): 移除值;
// 模拟实现 ThreadLocal
class MyThreadLocal<T> {
    private Map<Thread, T> map = new HashMap<Thread, T>();

    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<String> tl = new ThreadLocal<String>();

        tl.set("hello");

        // 匿名内部类来取值
        new Thread(){
            public void run(){
            System.out.println("内部类:" + tl.get()); // 输出结果为 null, 因为线程不同
            }
        }.start();
    }

参考资料:

原文地址:https://www.cnblogs.com/linkworld/p/7625406.html