-
[日常摘要] -- ThreadLocal篇
- 简介
- ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个
- 通过ThreadLocalMap实现,内部是一个Entry[],继承WeakReference,弱引用,GC时会自动回收
- 使用场景(线程安全)
- 关于内存泄露
- 每个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
润新知