ThreadLocal用于提供线程局部变量,在多线程环境中可以保证各个线程里的变量独立于其他线程里的变量。
也就是说,ThreadLocal可以为每个线程创建一个单独的变量副本,相当于线程的private static 类型变量。
ThreadLocal的的作用和同步机制有些相反:同步机制是为了保证多线程环境下的数据的一致性,而ThreadLocal是保证了多线程环境下数据的独立性。
eg:ThreadLocal的简单使用
public class TestThreadLocal {
private static String commStr;
private static ThreadLocal<String> threadStr = new ThreadLocal<String>();
public static void main(String[] args) {
commStr = "main";
threadStr.set("main");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
commStr = "thread";
threadStr.set("thread");
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(commStr);
System.out.println(threadStr.get());
}
}
运行结果可以看出,对于ThreadLocal类型的变量,在一个线程中设置值,不影响其在其他线程中的值。也就是说ThreadLocal类型的变量值在每个线程中都是独立的,不被共享的。