首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于 ThreadLocal 你需要知道的几点

关于 ThreadLocal 你需要知道的几点

作者头像
WindWant
发布2020-09-10 23:20:23
发布2020-09-10 23:20:23
38300
代码可运行
举报
文章被收录于专栏:后端码事后端码事
运行总次数:0
代码可运行

一、ThreadLocal是什么?

  • 一个类对象类型,提供属线程本地变量,也就是同一个变量对不同线程保存了不同的值,但是和线程自身定义的自属变量不同
  • 通常以私有静态类型定义,用以保存特定线程特定状态属性。
  • 线程存活期间保持对ThreadLocal的弱引用,线程结束后,则变量会被垃圾回收器回收。

二、ThreadLocal使用

代码语言:javascript
代码运行次数:0
运行
复制
//定义一个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();
}

输出:

代码语言:javascript
代码运行次数:0
运行
复制
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()方法,清除对应本线程的变量内存占用,避免内存泄漏。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、ThreadLocal是什么?
  • 二、ThreadLocal使用
  • 三、ThreadLocal需要注意的地方
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档