关于 ThreadLocal 你需要知道的几点
时间:2022-07-24
本文章向大家介绍关于 ThreadLocal 你需要知道的几点,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、ThreadLocal是什么?
- 一个类对象类型,提供属线程本地变量,也就是同一个变量对不同线程保存了不同的值,但是和线程自身定义的自属变量不同。
- 通常以私有静态类型定义,用以保存特定线程特定状态属性。
- 线程存活期间保持对ThreadLocal的弱引用,线程结束后,则变量会被垃圾回收器回收。
二、ThreadLocal使用
//定义一个ThreadLocal变量用以存储不同线程的ID
ThreadLocal<Long> localVs = new ThreadLocal<>();
//线程list
List<Thread> threads = new ArrayList<>();
//初始化线程
IntStream.range(0, 5).forEach(value -> {
Thread tmp = new Thread(() -> {
//线程运行时(线程运行期间),将ID放入变量
localVs.set(Thread.currentThread().getId());
//输出当前线程名称,ID
System.out.println(Thread.currentThread().getName() + ": " + Thread.currentThread().getId());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//延迟3s,输出当前线程名称,所属ThreadLocal变量
System.out.println(Thread.currentThread().getName() + ": " + localVs.get());
});
threads.add(tmp);
});
for (Thread thread : threads) {
thread.start();
}
输出:
Thread-0: 12
Thread-2: 14
Thread-1: 13
Thread-4: 16
Thread-3: 15
Disconnected from the target VM, address: '127.0.0.1:59273', transport: 'socket'
Thread-1: 13
Thread-0: 12
Thread-2: 14
Thread-4: 16
Thread-3: 15
三、ThreadLocal需要注意的地方
线程中使用ThreadLocal类型变量,在线程声明周期结束前调用ThreadLocal::remove()方法,清除对应本线程的变量内存占用,避免内存泄漏。
- 使用shell生成状态报表(r2笔记61天)
- 利用d3.js对QQ群资料进行大数据可视化分析
- 海量数据迁移之分区并行切分(r2笔记60天)
- 数据结构和算法——kd树
- shell脚本心得(r2笔记58天)
- C/C++——柔性数组
- 用shell脚本巧妙统计文件(r2笔记57天)
- MATLAB技巧——imshow多张图片
- MATLAB技巧——sort和sortrows函数
- Python对商品属性进行二次分类并输出多层嵌套字典
- 通过shell得到数据库中权限的脚本(r2笔记77天)
- 用Python实现PCA和MDA降维和聚类
- 通过shell解析dump生成parfile(r2笔记76天)
- Web Spider实战1——简单的爬虫实战(爬取"豆瓣读书评分9分以上榜单")
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法