threadlocal变量要不要volatile

循环日志 由这篇日志引出的奇怪的问题

原文的目的是尽早回收ThreadMap里的非活跃对象,不要搞的map太大

手段是从外部将所有 各种对象所引用的Threadlocal强制set为null,那么要强刷掉这些对象所在线程的缓存,则threadlocal对象也应该如内存泄漏事故(二)线程的中断不可信任【重要】配合volatile强制回收子线程成员变量一样设置为volatile,原理是一样的

Callable {

  volatile LoggerLimit

}

LoggerLimit 中有个threadlocal对象

当强制刷掉callable的loggerlimit后,所有线程的loggerlimit成员变量副本全部成为可回收,则在里面引用的threadlocal对象也可回收了

 

 

 

=========================

@Singleton

A {

  ThreadLocal th = new ThreadLocal (这里new出来的ThreadLoca对象记为X)

}

假设两个线程使用之后X这个对象强引用,有可能有2个;如果外部第三条线程把A的对象的th设置为null,未必会把强引用都打断,所以应设置为volatile

 

posted on 2024-12-02 23:14  silyvin  阅读(13)  评论(0)    收藏  举报