ThreadLocal概述:
ThreadLocal是Java中的一个线程局部变量工具类,它提供了一种在多线程环境下,每个线程都可以独立访问自己的变量副本的机制。ThreadLocal中存储的数据对于每个线程来说都是独立的,互不干扰。
使用场景:
在多线程环境下,需要保持线程安全性的数据访问。
需要在多个方法之间共享数据,但又不希望使用传递参数的方式。
基本用法:
1,创建ThreadLocal对象:
首先我们使用ThreadLocal对象来存储线程局部变量。可以使用ThreadLocal的默认构造函数创建一个新的实例。
ThreadLocal<String> threadLocal = new ThreadLocal();
2,设置线程局部变量:
使用set() 方法可以设置当前线程的局部变量的值。
threadLocal.set("sde");
3,获取线程局部变量的值:
使用
get()
方法可以获取当前线程的局部变量的值。
String s = threadLocal.get();
System.out.println(s);
4,清除线程的局部变量的值:
使用
remove()
方法可以清除当前线程的局部变量的值。
threadLocal.remove();
完整版:
@Test
void test(){
ThreadLocal<String> threadLocal = new ThreadLocal();
threadLocal.set("sde");
String s = threadLocal.get();
System.out.println(s);
threadLocal.remove();
}
}
示例代码:
下面是一个简单的示例代码,演示了如何使用ThreadLocal。
public class ThreadLocalTest {
private static final ThreadLocal THREAD_LOCAL = new ThreadLocal();
public static void main(String[] args) {
Thread t1 = new Thread(() ->{
THREAD_LOCAL.set("sde666");
getData("t1");
},"t1");
Thread t2 = new Thread(() ->{
THREAD_LOCAL.set("sde888");
getData("t2");
},"t2");
t1.start();
t2.start();
}
private static void getData(String threadName){
Object data = THREAD_LOCAL.get();
System.out.println(threadName+"_"+data);
}
}