(面经总结)一篇文章带你整理面试过程中关于ThreadLocal的相关知识

本文详细介绍了ThreadLocal的概念、应用场景及底层实现原理,包括set和get方法、ThreadLocalMap的存储机制以及内存泄露问题。ThreadLocal主要用于解决线程内的数据隔离,常见应用如Spring的数据库连接管理。在实现上,ThreadLocalMap类似于HashMap,但通过弱引用避免了链表,并通过拉链法解决哈希冲突。最后讨论了ThreadLocal可能导致的内存泄露及其预防措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是 ThreadLocal

ThreadLocal类顾名思义可以理解为线程本地变量。也就是说如果定义了一个ThreadLocal, 每个线程往这个ThreadLocal中读写是线程隔离,互相之间不会影响的,主要用来解决线程内资源的共享,

比如,让100个人填写个人信息表,如果只有一支笔,那么大家就得挨个填写,对于管理人员来说,必须保证大家不会去哄抢这仅存的一支笔,否则,谁也填不完。
从另外一个角度出发,我们可以准备100支笔,人手一支,那么所有人很快就能完成表格的填写工作。如果说锁使用的是第一种思路,那么 ThreadLocal 使用的就是第二种思路。

锁就是通过控制资源的访问,而ThreadLocal是 通过增加资源来保证所有对象的线程安全

这也被叫做数据隔离,保证只有在线程内才能获取到对应的值,线程外不能访问。

线程的隔离特性:

  • Synchronized 是通过线程等待,牺牲时间来解决访问冲突
  • ThreadLocal 是通过每个线程单独一份存储空间,牺牲空间来解决冲突

二、ThreadLocal 的应用场景

实际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值