ThreadLocal

1.每条线程都有一个ThreadLocalMap对象,而可以有多个threadlocal对象存放在map中。
2.放在map中的key是WeakReference<ThreadLocal<?>>,也就是ThreadLocal的弱引用。
3.ThreadLocalmap会把那些过期的key设置为null,并且删除那些key为null的值。
4.ThreadLocalmap的key是弱引用,也就是说弱引用在没有被其他强引用所引用,gc就会回收。而value是强引用,如果用线程池技术,该线程一直没有结束,value一直没办法被回收。所以key为null的entry的value就一直占据内存,造成内存泄露。
5.因为上述的原因,在ThreadLocal这个类的get()、set()、remove()方法,均有实现回收 key 为 null 的 Entry 的 value所占的内存。所以,为了防止内存泄露(没法访问到的内存),在不会再用ThreadLocal的线程任务末尾,调用一次 上述三个方法的其中一个即可,一般使用remove。

相关推荐

  1. ThreadLocal

    2024-03-11 15:40:01       38 阅读
  2. ThreadLocal

    2024-03-11 15:40:01       21 阅读
  3. ThreadLocal介绍

    2024-03-11 15:40:01       17 阅读
  4. ThreadLocal和InheritableThreadLocal

    2024-03-11 15:40:01       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-11 15:40:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-11 15:40:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-11 15:40:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-11 15:40:01       20 阅读

热门阅读

  1. deeplearning with pytorch (四)

    2024-03-11 15:40:01       22 阅读
  2. 报表生成器Stimulsoft用户手册:表达式(上)

    2024-03-11 15:40:01       18 阅读
  3. HuggingFace Hub系列:推动NLP前进的协作平台

    2024-03-11 15:40:01       22 阅读
  4. Hive中窗口函数的使用示例

    2024-03-11 15:40:01       24 阅读
  5. Hive超市零售案例

    2024-03-11 15:40:01       17 阅读
  6. redis常见问题

    2024-03-11 15:40:01       26 阅读