ThreadLocal的八个关键知识点

ThreadLocal是Java中用于实现线程局部变量的类,它提供每个线程自己的副本,避免并发问题。本文将探讨ThreadLocal的工作原理,为何不直接使用线程ID作为key,为何使用弱引用,以及如何可能导致内存泄漏。此外,还将讨论InheritableThreadLocal在父子线程间共享数据的角色,以及ThreadLocal的适用场景和使用注意事项。
摘要由CSDN通过智能技术生成

7304eff3b7a9b011973ffccd297203ec.png

若有收获,请记得分享和转发哦

无论是工作还是面试中,我们都会跟ThreadLocal打交道,今天就跟大家聊聊ThreadLocal的八个关键知识点哈~

  1. ThreadLocal是什么?为什么要使用ThreadLocal

  2. 一个ThreadLocal的使用案例

  3. ThreadLocal的原理

  4. 为什么不直接用线程id作为ThreadLocalMap的key

  5. 为什么会导致内存泄漏呢?是因为弱引用吗?

  6. Key为什么要设计成弱引用呢?强引用不行?

  7. InheritableThreadLocal保证父子线程间的共享数据

  8. ThreadLocal的应用场景和使用注意点

1. ThreadLocal是什么?为什么要使用ThreadLocal?

ThreadLocal是什么?

ThreadLocal,即线程本地变量。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是在操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了并发场景下的线程安全问题。

//创建一个ThreadLocal变量
static ThreadLocal<String> localVariable = new ThreadLocal<>();

为什么要使用ThreadLocal

并发场景下,会存在多个线程同时修改一个共享变量的场景。这就可能会出现线性安全问题

为了解决线性安全问题,可以用加锁的方式,比如使用synchronized 或者Lock。但是加锁的方式,可能会导致系统变慢。加锁示意图如下:

24c2bf12b62ee21e77cc3a5f2642eeb3.png

0d8b07c8c834414e3d0976b1b2ff4504.png

8767236ebd18e25afbc869ccbb5b5a64.png

8cb669ba8e42990b7f82c05f4bf64b28.png

37b6e00b745a3bcb4c5fb8b6576c17bb.png

bc40e67631a8e08d0f603edafe2a5a8f.png

a6e6f181bc4d7545dd87afb372ce71f7.png

5032706045a26878805497c624e06da2.png

c38b5ea6266c0161ddf98a1ea1a57edd.png

f164707c23e9512e5a2fb625faec8a42.png

7152d3920ac40c5993442b3614584297.png

7a9d4902c151e1ecc1dda5a084e793c2.png

beaf92b90194858e9c3a57f1c2c6d016.png

80f855abec7bd1f59c1c9d16e5565d76.png

a0dde0461c31902acedaaccfbc54b9c2.png

481b2543bcb160f1fb2193f06c82431e.png

556e8690eadc610a1dea3ae7c4e520c5.png

db9cafb8e2cf559df513d24098407192.png

bc4d76ad1bae6462358f13f74ad82748.png

cff123be46970f616e123ea9c363e023.png

0f0aa604b0d0e1f820ec6977edd7ba01.png

5e974959b780fdc5cf2b037c37eaf5cf.png

32b8f12b33815fee2abdcb02a401e937.png

6ddbe3b1c740d9e4cf804a99b39d4229.png

b3c2c7adb6c025f8e2031e9609b65566.png

f4f9bd93498fbd3b69aef156d36440da.png

4d5f0969a9e24ed6b49fe02f8194e5e7.png

2c74a8ebbf37565b690c7dda4aa790e9.png

96dc5aac2702fc6d8530bd28cab15302.png

5c71a5f7e4a6079847923a7791c2f842.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值