• [日常摘要] -- ThreadLocal篇


    • 简介
      • ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个
    • 通过ThreadLocalMap实现,内部是一个Entry[],继承WeakReference,弱引用,GC时会自动回收
    • 使用场景(线程安全)
      • 数据库链接管理类
      • Session管理
    • 关于内存泄露
      • 每个thread中都存在一个map, map的类型是ThreadLocal.ThreadLocalMap. Map中的key为一个threadlocal实例. 这个Map的确使用了弱引用,不过弱引用只是针对key. 每个key都弱引用指向threadlocal. 当把threadlocal实例置为null以后,没有任何强引用指向threadlocal实例,所以threadlocal将会被gc回收. 但是,我们的value却不能回收,因为存在一条从current thread连接过来的强引用.只有当前thread结束以后, current thread就不会存在栈中,强引用断开, Current Thread, Map, value将全部被GC回收。所以得出一个结论就是只要这个线程对象被gc回收,就不会出现内存泄露,但在threadLocal设为null和线程结束这段时间不会被回收的,就发生了我们认为的内存泄露
  • 相关阅读:
    jQuery中的事件与动画
    jQuery选择器
    Flask学习【第3篇】:蓝图、基于DBUtils实现数据库连接池、上下文管理等
    Flask学习【第2篇】:Flask基础
    Flask学习【第1篇】:Flask介绍
    Python学习总目录
    Linux--安装Python3&虚拟环境
    Linux基础之vim
    Linux基础值Shell
    Linux文件系统结构
  • 原文地址:https://www.cnblogs.com/lycsmzl/p/13213945.html
Copyright © 2020-2023  润新知