线程局部变量ThreadLocal的原理及使用范围_1

线程局部变量ThreadLocal的原理及使用范围

使用原理

每个Thread中都有一个ThreadLocalMap成员, 该成员是ThreadLocal的内部类ThreadLocalMap类型。每使用ThreadLocal时,具体的流程如下

  • 1 新建一个ThreadLocal对象

    ThreadLocal<String> stringLocal = new ThreadLocal<String>();

  • 2 将需要全线程使用的成员set进threadLocalMap

    stringLocal.set("string test1.");

  • 3 获取strTest成员


    String strTest = stringLocal.get();
    if (null == strTest){
        stringLocal.set("string test1.");
    }

第2点在set成员时,会先获取 当前Thread的ThreadLocalMap成员,如果为空,会重新new 一个 ThreadLocalMap 对象赋给该成员,然后 以ThreadLocal对象引用为key,set值为 value,存入ThreadLocalMap.

第3点会以ThreadLocal对象引用为key, 在当前线程的ThreadLocalMap中获取之前set的对象

优点

线程局部变量会随线程的结束而销毁,能对合理运用内存

能在整个线程内任意取用资源,不受参数传递的限制

使用场景

  • 多线程对象独享 单个线程的数据库连接的获取和关闭,游戏中每个房间应该就可以做为一个线程,一些公共数据可以存在线程局部变量中,用户登录购物网站时一些公共数据也可以放在线程局部变量中。

转载于:https://www.cnblogs.com/luoziyihao/p/luozi5.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值