gpt4 book ai didi

java - 如果不清除 ThreadLocal 变量,会发生什么?

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:44 26 4
gpt4 key购买 nike

在一个类中定义了一个线程局部变量来维护一些实例。设置和获取递归方法。有点我无法在请求完成时清除 threadlocal 变量(我已经用所有其他方式分析过。我无法清除 threadlocal)。

我的问题是,如果我没有为每个请求清除线程局部变量,会发生什么?有什么影响?

最佳答案

javadoc 说:

after a thread goes away, all of its copies of thread-local instances are subject to garbage collection (unless other references to these copies exist).

例如,the implementation这里由使用 weak references 的哈希表支持为关键。在这种情况下,关键是线程。如果线程终止,映射中的条目将有资格进行垃圾回收。

只有当系统开始耗尽内存空间时,垃圾收集才会发生。但是这个考虑适用于系统中的所有对象:对象何时开始被回收取决于 GC 策略,这是 VM 特定的并且需要调整。

这是我对线程局部变量的好坏用法的看法:

  • 如果要解决并发问题,最好不要使用线程局部变量。例如,避免同步 an object that is not thread-safe by keeping one copy per thread .或者解决与并发相关的其他设计问题。

  • 如果要点是以便宜的方式在调用链中“传递参数”,那是不好的。您应该更好地重构您的代码,并将对象作为常规方法参数传递到调用链中。

  • 可以使用本地线程来存储某种形式的“当前”上下文,例如当前请求。

关于java - 如果不清除 ThreadLocal 变量,会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10595053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com