天天看点

并发编程处理实战篇9:线程本地变量ThreadLocal

PS:

关于多线程共享变量ThreadLocal<T>

变量值的共享可以使用public static 变量的形式,所有的线程都可以使用同一个public static变量。如果想实现每一个线程都有自己的共享变量,如何实现?

JDK中提供了类ThreadLocal<T>可以解决这样的问题。

原理:

ThreadLocal所属包java.lang.ThreadLocal<T> 是个泛型class

ThreadLocal为解决多线程并发问题提供了新的思路,使用这个类库可以简洁的实现多线程程序,

当使用ThreadLocal维护变量时,ThreadLocal为每一个使用该变量的线程提供独立的变量副本,所以没一个线程都可以改变自己的副本,而不会影响到其他线程对于的变量副本。

从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。

ThreadLocal为每一个线程维护变量的副本的原理:在ThreadLocal类中有一个Map集合,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程的变量副本,查看ThreadLocal的源码可以看到

其开放的方法主要有:

public T get()  返回当前线程所对应的线程局部变量。

public void set(T value)  设置当前线程的线程局部变量的值。

public void remove() 将当前线程局部变量的值删除,目的是为了减少内存的占用