Java的ThreadLocal变量是线程的局部变量,只能被本线程访问,不能被其它线程访问,也就是说线程间进行了隔离。每个线程访问该变量的一个独立拷贝,互相不干扰。感觉跟synchronized的作用相反,synchronized是为了保护线程间共享访问同一个资源。
ThreadLocal变量通常用private static修饰。
代码示例:
package com.thb;
public class Test1 {
// 定义一个ThreadLocal变量
private static ThreadLocal<String> name = new ThreadLocal<String>();
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
public void run() {
// 设置ThreadLocal变量的值
Test1.name.set(Thread.currentThread().getName());
// 取出ThreadLocal变量的值并显示在控制台上
System.out.println("in " + Test1.name.get());
// 释放ThreadLocal变量的值
Test1.name.remove();
}
}, "thread " + i).start();
}
}
}
一次运行结果: