阅读本文大概需要6.8分钟
欢迎大家关注我的公众号:神兽学编程
目录
5.2、replaceStaleEntry 替换无效Entry
5.6、为什么 ThreadLocalMap 的 Key 是弱引用
1、前言
在Java多线程模块中,ThreadLocal是经常被提问到的一个知识点,提问的方式多种多样,只有理解透彻了,才能回答的游刃有余。以下介绍基于JDK1.8进行。
2、定义
从名字我们可以看出ThreadLocal叫做线程局部变量,意思是ThreadLocal在每个线程中都创建了一个变量的副本,不同线程拥有的副本互不影响。
2.1、使用场景
①、在进行对象跨层传递的时候,可以避免多次传递,打破层次间的约束;
②、线程间数据隔离;
③、进行事务操作,用于存储线程事务信息;
④、数据库连接,Session会话管理。
3、用法
既然ThreadLocal的作用是每一个线程创建一个副本,我们使用一个例子来验证一下:创建两个线程,线程t1设置var值为20,线程t2设置var值为15,分别输出var值
public class Demo {
private static ThreadLocal<Integer> var = new ThreadLocal<>();
public static void main(String[] args) {
Thread t1 = new Thread(()->{
var.set(20);
System.out.println(Thread.currentThread().getName() + ":设置var值为20");