JAVA全系列 教程
3762个小节阅读:7095.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
ThreadLocal是JDK 1.2 出现类。通过ThreadLocal可以给每个线程提供一个局部变量。只要线程对象不变,可以随时获取。
一个ThreadLocal可以存储一个Object类型值。具体可以是一个String,一个List或一个Map,具体存储值类型可以使用泛型进行控制。
xxxxxxxxxx
@Test
void testThreadLocal(){
ThreadLocal<String> tl = new ThreadLocal<String>();
tl.set("smallming");
new Thread(){
@Override
public void run() {
System.out.println("其他线程:"+tl.get());
}
}.start();
System.out.println(tl.get());
}
在ThreadLocal中有很多子类。
其中NamedThreadLocal是一个允许给这个局部变量起名字的实现类。使用全局final属性记录这个名字。
如果ThreadLocal类及子类设置的泛型需要赋予初始值,可以重写initilaValue()方法。
示例代码:
xxxxxxxxxx
@Test
void test2(){
ThreadLocal<Map<String,Object>> tl = new NamedThreadLocal<>("名字"){
@Override
protected Map<String, Object> initialValue() {
return new HashMap<>();
}
};
tl.get().put("name","smallming");// 主线程放一个值进去
new Thread(){
@Override
public void run() {
System.out.println("子线程:"+tl.get().size());
}
}.start();
System.out.println("主线程:"+tl.get().size());
}