ThreadLocal是什么?
admin
2024-02-13 23:01:53

1、ThreadLocal是什么?

从名字我们就可以看到ThreadLocal 叫做本地线程变量,意思是说,ThreadLocal 中填充的的是当前线程的变量,该变量对其他线程而言是封闭且隔离的,ThreadLocal 为变量在每个线程中创建了一个副本,这样每个线程都可以访问自己内部的副本变量。

2、ThreadLocal的应用场景有哪些?

  • 1、在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束
  • 2、线程间数据隔离
  • 3、进行事务操作,用于存储线程事务信息
  • 4、数据库连接,Session会话管理

3、ThreadLocal怎么用?

下述程序,我们声明了一个ThreadLocal,并且声明了十个不同线程,分别使用get()打印出各自set()的内容

public class ThreadLocalTest {public static void main(String[] args) {ThreadLocal local = new ThreadLocal<>();IntStream.range(0, 10).forEach(i -> new Thread(() -> {local.set(Thread.currentThread().getName() + ":" + i);System.out.println("线程:" + Thread.currentThread().getName() + ",local:" + local.get());}).start());}
}
输出结果:
线程:Thread-0,local:Thread-0:0
线程:Thread-1,local:Thread-1:1
线程:Thread-2,local:Thread-2:2
线程:Thread-3,local:Thread-3:3
线程:Thread-4,local:Thread-4:4
线程:Thread-5,local:Thread-5:5
线程:Thread-6,local:Thread-6:6
线程:Thread-7,local:Thread-7:7
线程:Thread-8,local:Thread-8:8
线程:Thread-9,local:Thread-9:9

 从结果可以看到,每一个线程都有我们自己设置的local值。

 

4、 ThreadLocal源码分析

这里就直接写总结,方便大家快速了解。

官方的说:在ThreadLocal中定义了一个ThreadLocalMap静态内部类,在里面定义了Entry 来保存数据。在Entry内部使用ThreadLocal作为key,使用我们设置的值作为value。这样就可以通过ThreadLocal来找到我们设置的value。对于每个线程内部有个ThreadLocal.ThreadLocalMap 变量,存取值的时候,也是从这个容器中来获取。

实际上就是:TreadLocal里面有一个表,表里面映射着我们存放的内容,要用的时候就拿呗。

相关内容

热门资讯

同样卖奶茶,为何古茗赚了15亿... 出品/联商专栏 撰文/老刀 编辑/蔡建桢 今年上半年,蜜雪、古茗、霸王茶姬、茶百道、沪上阿姨全部盈利...
现烤散装走俏、新口味亮相、健康... 中秋佳节临近,成都月饼市场已全面开启“上新季”。记者连日来走访成都多家商超看到,月饼专区占据卖场核心...
散装月饼靠性价比当上“人气王” 华润超市货架上的散装月饼。 深圳报业集团记者 欧阳莹 摄 深圳晚报讯 (深圳报业集团记者 欧阳莹) ...
原创 9... 九月初秋,燥气渐起,容易咽喉干痒、口鼻缺水、干咳烦闷。多喝清润汤水,滋养肺阴,补足身体津液,不寒不腻...
原创 生... 山药是秋季深藏不露的养生食材,也是为数不多 生用补肾、熟用健脾 的平价好物。生山药滋阴补肾、固护肾精...