@@ -141,7 +141,7 @@ static class Entry extends WeakReference<ThreadLocal<?>> {
1411411 . 在使用完 ` ThreadLocal ` 后,务必调用 ` remove() ` 方法。 这是最安全和最推荐的做法。 ` remove() ` 方法会从 ` ThreadLocalMap ` 中显式地移除对应的 entry,彻底解决内存泄漏的风险。 即使将 ` ThreadLocal ` 定义为 ` static final ` ,也强烈建议在每次使用后调用 ` remove() ` 。
1421422 . 在线程池等线程复用的场景下,使用 ` try-finally ` 块可以确保即使发生异常,` remove() ` 方法也一定会被执行。
143143
144- ### 如何跨线程传递 ThreadLocal 的值?
144+ ### ⭐️如何跨线程传递 ThreadLocal 的值?
145145
146146由于 ` ThreadLocal ` 的变量值存放在 ` Thread ` 里,而父子线程属于不同的 ` Thread ` 的。因此在异步场景下,父子线程的 ` ThreadLocal ` 值无法进行传递。
147147
@@ -150,7 +150,7 @@ static class Entry extends WeakReference<ThreadLocal<?>> {
150150- ` InheritableThreadLocal ` :` InheritableThreadLocal ` 是 JDK1.2 提供的工具,继承自 ` ThreadLocal ` 。使用 ` InheritableThreadLocal ` 时,会在创建子线程时,令子线程继承父线程中的 ` ThreadLocal ` 值,但是无法支持线程池场景下的 ` ThreadLocal ` 值传递。
151151- ` TransmittableThreadLocal ` : ` TransmittableThreadLocal ` (简称 TTL) 是阿里巴巴开源的工具类,继承并加强了` InheritableThreadLocal ` 类,可以在线程池的场景下支持 ` ThreadLocal ` 值传递。项目地址:< https://github.com/alibaba/transmittable-thread-local > 。
152152
153- #### ` InheritableThreadLocal ` 原理扩展
153+ #### InheritableThreadLocal 原理
154154
155155` InheritableThreadLocal ` 实现了创建异步线程时,继承父线程 ` ThreadLocal ` 值的功能。该类是 JDK 团队提供的,通过改造 JDK 源码包中的 ` Thread ` 类来实现创建线程时,` ThreadLocal ` 值的传递。
156156
@@ -181,7 +181,7 @@ private void init(/* ... */) {
181181}
182182```
183183
184- #### ` TransmittableThreadLocal ` 原理扩展
184+ #### TransmittableThreadLocal 原理
185185
186186JDK 默认没有支持线程池场景下 ` ThreadLocal ` 值传递的功能,因此阿里巴巴开源了一套工具 ` TransmittableThreadLocal ` 来实现该功能。
187187
@@ -370,8 +370,6 @@ public void allowCoreThreadTimeOut(boolean value) {
370370
371371当队列中有可用任务时,会唤醒被阻塞的线程,线程的状态会由 ` WAITING ` 状态变为 ` RUNNABLE ` 状态,之后去执行对应任务。
372372
373- #### 相关源码
374-
375373接下来通过相关源码,了解一下线程池内部是如何做的。
376374
377375线程在线程池内部被抽象为了 ` Worker ` ,当 ` Worker ` 被启动之后,会不断去任务队列中获取任务。
0 commit comments