1. 解决的问题:
多线程访问共享变量时,为了线程安全会加入锁机制,这加重了开发者的负担。于是出现了ThreadLocal。
2. ThreadLocal类
创建共享变量时,每个线程会访问属于自己独有的一份共享变量的拷贝,从而避免了线程安全的问题。
3.ThreadLocal代码示例
代码示例:
定义ThreadLocal共享变量,然后线程1和线程2分别访问、操作共享变量,结果显示线程1和2操作的ThreadLocal共享变量互不影响。
public class ThreadLocalTest {
static ThreadLocal<String> localVariable = new ThreadLocal<>();
static void print(String str){
System.out.println(str+":"+localVariable.get());
// localVariable.remove();
}
public static void main(String[] args){
Thread threadOne = new Thread(new Runnable() {
@Override
public void run() {
localVariable.set("threadOne local Variable");
print("threadOne");
System.out.println("threadOne remove after"+":"+localVariable.get());
}
});
Thread threadTwo = new Thread(new Runnable() {
@Override
public void run() {
localVariable.set("threadTwo local Variable");
print("threadTwo");
System.out.println("threadTwo remove after"+":"+localVariable.get());
}
});
threadOne.start();
threadTwo.start();
}
}
输出:
threadOne:threadOne local Variable
threadOne remove after:threadOne local Variable
threadTwo:threadTwo local Variable
threadTwo remove after:threadTwo local Variable
释放remove后输出:
threadOne:threadOne local Variable
threadOne remove after:null
threadTwo:threadTwo local Variable
threadTwo remove after:null