java中ThreadLocal使用

java中ThreadLocal使用

一、简介

ThreadLocal是java线程中的局部变量,变量作用域仅在当前线程有效,是线程安全的。ThreadLocal常用于在多线程中,各自线程保存自己私有的变量值,如会话管理等场景。

二、使用

ThreadLocal类定义及常用方法如下:

public class ThreadLocal<T> {
   
  protected T initialValue() //初始化方法,protected方法,用于子类重写;
  public void set(T value) //设置值;
  public T get() //获取值;
  public void remove() //清空值。当线程回收时,局部变量也会自动回收,主动调起是非必须操作,只是加快回收速度;
}

三、原理

ThreadLocal在多线程中是线程安全的,原因是在每个线程中,都维持着自己私有的类型为ThreadLocal.ThreadLocalMap的变量threadLocals。

3.1 Thread类

Thread类关键源码:

//Thread类中threadLocals变量, 维护在ThreadLocal中
ThreadLocal.ThreadLocalMap threadLocals = null;

即是Thread类每个实例都有自己独立的threadLocal变量,理所当然线程是安全的。

3.2 ThreadLocal类
3.2.1 主要方法

TheadLocal类的主要操作方法源码如下:

//获取值
public T get() {
   
    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null) {
   
        ThreadLocalMap.Entry e = map.getEntry(this);
        if (e != null) {
   
            @SuppressWarnings("unchecked")
            T result = (T)e.value;
            return result;
        }
    }
    return setInitialValue();
}

//初始化
private T setInitialValue() {
   
    T value = initialValue();
    Thread t = Thread.currentThread();
    ThreadLocalMap map 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值