ThreadLocal类

当多个线程需要同时访问一个共享变量时,不可避免地产生数据竞争,通常是采用同步机制来解决。

也可以使用线程局部变量即ThreadLocal类,不同线程访问一个ThreadLocal类的对象时,所访问和修改的是每个线程各自独立的对象,相当于这个对象是线程的一个私有对象。

一般覆写initialValue方法提供对象的初始值。

作用之一就是创建线程唯一的对象,如果用到这个对象的代码都在同一个线程中运行,可以把该对象封装在ThreadLocal类的对象中,避免逐个传参。比如在web应用的servlet中,一个servlet请求一般由单一线程来操作,可以把开始处理请求时的全局对象保存在ThreadLocal中,比如用户id。

public class ThreadLocalIdGenerator {

    private static final ThreadLocal<IdGenerator> idGenerator = new ThreadLocal<IdGenerator>() {
        protected IdGenerator initialValue() {
            return new IdGenerator();
        }
    };
    public static int getNext() {
        return idGenerator.get().getNext();
    }
}

class IdGenerator {
    private int value = 0;
    public int getNext() {
        return value++;
    }
}


你可能感兴趣的:(ThreadLocal类)