ThreadLocal简介
ThreadLocal并不是一个Thread,而是Thread的局部变量
ThreadLocal为每个线程提供一份单独的存储空间,具有线程隔离的效果,不同的线程之间不会相互干扰
应用场景:在同一个线程或同一个请求中,进行数据共享
ThreadLocal常用方法:
public void set(T value)设置当前线程的线程局部变量的值
public T get()返回当前线程所对应的线程局部变量的值
public void remove()移除当前线程的线程局部变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
/**
* ThreadLocalTest类演示了ThreadLocal的基本使用
* ThreadLocal用于实现线程本地变量,每个线程都可以独立访问自己的变量副本
*/
public class ThreadLocalTest {
// 创建一个ThreadLocal变量,用于存储String类型的线程本地变量
private static ThreadLocal<String> local = new ThreadLocal<>();
public static void main(String[] args) {
// 在主线程中设置ThreadLocal的值为"Main……"
local.set("Main……");
// 创建并启动一个新线程
new Thread(new Runnable() {
@Override
public void run() {
// 在子线程中设置ThreadLocal的值为"Sub……"
local.set("Sub……");
// 打印子线程名和ThreadLocal的值
System.out.println(Thread.currentThread().getName() + ":" + local.get());
}
}).start();
// 打印主线程名和ThreadLocal的值
System.out.println(Thread.currentThread().getName() + ":" + local.get());
// 移除主线程中的ThreadLocal变量
local.remove();
// 再次打印主线程名和ThreadLocal的值(应为null)
System.out.println(Thread.currentThread().getName() + ":" + local.get());
}
}
/**
* 运行结果:
* Thread-0:Sub……
* main:Main……
* main:null
*/
|