ThreadLocal的使用

ThreadLocal,线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。
可以通过set(T)来设置一个值,在当前线程下通过get()方法获取到原来设置的值。

我的理解:
ThreadLocal就相当于一个Map,所有的线程都可以往这个map里面put,其中key值就是这个线程,每个线程从这个map中取值的时候,都只能取到自己put的内容。

package com.threadlocaltest;

import java.util.concurrent.TimeUnit;

public class Profiler {
    private static final ThreadLocal TIME_THREADLOCAL = new ThreadLocal(){
        @Override
        protected Long initialValue() {
            return Thread.currentThread().getId();
        }
    };
    public static final void begin(){
        TIME_THREADLOCAL.set(System.currentTimeMillis());
    }
    public static final long end(){
        return System.currentTimeMillis() - TIME_THREADLOCAL.get();
    }
    
    public static void main(String[] args) {
        Profiler.begin();
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Profiler.end());
    }
}

你可能感兴趣的:(ThreadLocal的使用)