ThreadLocal可以为全局状态变量,在当前执行线程创建一个副本,这个副本只允许当前线程访问,其他线程无法访问,实现线程封闭。通过接口方法set在当前执行线程的副本上设置值,通过get获取设置的值,第一次调用get时候会执行一个初始化方法initialValue初始化副本值。
package cn.concurrent.t1;
public class Th1 {
private static ThreadLocal<String> ths=new ThreadLocal<String>(){
public String initialValue(){
return "ABC";
}
};
public static String getStr(){
return ths.get();
}
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
ths.set("EFG");
System.out.println(getStr());
}
}).start();
System.out.println(getStr());
}
}
输出:
ABC
EFG
ThreadLocal 使得main线程和单独启动的一个线程都维护了自己的副本变量的值。