From 89316841b428c5fde1be51022c088aeb3b6dd493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9D=90=E5=92=8C=E6=94=BE=E5=AE=BD?= <849421294godw@gmail.com> Date: Sun, 24 Mar 2024 01:20:21 +0800 Subject: [PATCH] fix typo --- docs/java/java-concurrent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/java-concurrent.md b/docs/java/java-concurrent.md index bb62dcc..89a2f1e 100644 --- a/docs/java/java-concurrent.md +++ b/docs/java/java-concurrent.md @@ -808,7 +808,7 @@ public class ThreadLocalDemo { ### ThreadLocal内存泄漏的原因? -每个线程都有⼀个`ThreadLocalMap`的内部属性,map的key是`ThreaLocal`,定义为弱引用,value是强引用类型。垃圾回收的时候会⾃动回收key,而value的回收取决于Thread对象的生命周期。一般会通过线程池的方式复用线程节省资源,这也就导致了线程对象的生命周期比较长,这样便一直存在一条强引用链的关系:`Thread` --> `ThreadLocalMap`-->`Entry`-->`Value`,随着任务的执行,value就有可能越来越多且无法释放,最终导致内存泄漏。 +每个线程都有⼀个`ThreadLocalMap`的内部属性,map的key是`ThreadLocal`,定义为弱引用,value是强引用类型。垃圾回收的时候会⾃动回收key,而value的回收取决于Thread对象的生命周期。一般会通过线程池的方式复用线程节省资源,这也就导致了线程对象的生命周期比较长,这样便一直存在一条强引用链的关系:`Thread` --> `ThreadLocalMap`-->`Entry`-->`Value`,随着任务的执行,value就有可能越来越多且无法释放,最终导致内存泄漏。 解决⽅法:每次使⽤完`ThreadLocal`就调⽤它的`remove()`⽅法,手动将对应的键值对删除,从⽽避免内存泄漏。