ThreadLocal的使用

2016-07-08  本文已影响21人  全栈未遂工程师

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<Long> TIME_THREADLOCAL = new ThreadLocal<Long>(){
        @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());
    }
}
上一篇 下一篇

猜你喜欢

热点阅读