在类中定义了一个threadlocal变量来维护一些实例.设置和获取递归方法.有些我无法在请求完成时清除threadlocal变量(我已经用其他所有方式进行了分析.我无法清除threadlocal).
我的问题是,如果我没有为每个请求清除threadlocal变量,会发生什么?有什么影响?
ewe*_*nli 10
javadoc说:
在一个线程消失之后,它的所有线程局部实例副本都要进行垃圾收集(除非存在对这些副本的其他引用).
例如,这里的实现由HashTable支持,该HashTable使用密钥的弱引用.在这种情况下,键是线程.如果线程终止,则映射中的条目将有资格进行垃圾回收.
垃圾收集可能仅在系统开始耗尽内存空间时才会发生.但是这种考虑适用于系统中的所有对象:当对象开始被回收时,取决于GC策略,这是VM特定的并且可以进行调整.
这是我对线程本地的好坏的看法:
这是很好的催产素使用线程局部变量,如果关键是要解决并发问题.例如,通过为每个线程保留一个副本来避免同步非线程安全的对象.或者解决与并发相关的其他设计问题.
如果重点是以便宜的方式"通过参数"向下调用链接,这是很糟糕的.您应该更好地重构代码并将对象作为常规方法参数传递给调用链.
它是确定使用线程本地存储某种形式的"当前"的背景下,如当前请求的.
如果线程终止,对 ThreadLocal 条目的引用也会终止,因此您的对象(假设没有其他引用)将被垃圾收集。
只要线程存在,你的对象也存在。
您必须评估对您的对象的长期寿命有什么影响。
| 归档时间: |
|
| 查看次数: |
2241 次 |
| 最近记录: |