JAVA API:
该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。 ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
每个线程都保持对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)。
ThreadLocal提供的方法:
1、get()
返回此线程局部变量的当前线程副本中的值。
2、initialValue()
返回此线程局部变量的当前线程的“初始值”。
3、remove()
移除此线程局部变量当前线程的值。
将此线程局部变量的当前线程副本中的值设置为指定值。
Java 实例:
package com.acme;
/**
* ThreadLocal
* 是线程本地变量
* 用它来存储的数据是每个线程一份
* 它内部维护一个Map对象,其中key是当前线程,值是set方法提供的值
*
* 方法:
* set(): 赋值
* remove():删除值
*
* @author acme.w
*
*/
public class ThreadLocalDemo {
public static void main(String[] args) {
final ThreadLocal<String> tl = new ThreadLocal<String>();
//保存为,当前main线程是key,值是1234t
tl.set("1234t");
new Thread(new Runnable() {
@Override
public void run() {
//保存为,Thread-0的线程为key,值是899897o
tl.set("899897o");
System.out.println(Thread.currentThread().getName() + ":" + tl.get());
}
}).start();
System.out.println(Thread.currentThread().getName() + ":" + tl.get());
//清除值
tl.remove();
System.out.println(Thread.currentThread().getName() + ":" + tl.get());
}
}