在类中定义了threadlocal变量以维护某些实例。设置并获取递归方法。当请求完成时,某种程度上我无法清除threadlocal变量(我已经以其他所有方式进行了分析。我无法清除threadlocal)。

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

最佳答案

Javadoc说:



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

仅当系统开始用尽内存空间时,垃圾回收才可能发生。但是,此注意事项适用于系统中的所有对象:何时开始回收对象取决于GC策略,该策略是VM特定的并且需要调整。

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

  • 如果要解决并发问题,是很好的,请使用线程本地。例如,避免an object that is not thread-safe by keeping one copy per thread同步。或解决与并发相关的其他设计问题。
  • 如果要廉价地在调用链中“传递参数”,则是不好的。您应该更好地重构代码,并将对象作为常规方法参数传递给调用链。
  • 可以使用本地线程存储某种形式的“当前”上下文,例如。当前请求。

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

    10-11 04:20