当前位置: 首页 > news >正文

ThreadLocal的原理

  1. ThreadLocal是Java中的一个类,它提供了线程本地变量的功能。每个线程都可以独立地访问自己的ThreadLocal变量,并且不会受到其他线程的干扰。
    public class ThreadLocal<T> {

  2. ThreadLocal的原理是通过使用一个ThreadLocalMap来存储每个线程的变量副本。ThreadLocalMap是ThreadLocal的一个内部类,它是一个键值对的集合,其中键是线程对象,值是线程对应的变量副本。
    static class ThreadLocalMap {

  3. 当我们调用ThreadLocal的set方法时,实际上是在当前线程的ThreadLocalMap中以ThreadLocal对象为键,将要设置的变量作为值进行存储。而当我们调用get方法时,会从当前线程的ThreadLocalMap中根据ThreadLocal对象找到对应的变量副本并返回。

    public void set(T value) {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null)map.set(this, value);elsecreateMap(t, value);}
  1. 由于ThreadLocalMap的键是线程对象,因此不同线程之间的变量互相隔离。每个线程只能访问自己所对应的变量副本,无法直接访问其他线程的变量。

  2. 此外,ThreadLocal还提供了一些其他的方法,如remove和initialValue等。remove方法用于移除当前线程的ThreadLocal变量,而initialValue方法可以用来设置变量的初始值。

     public void remove() {ThreadLocalMap m = getMap(Thread.currentThread());if (m != null)m.remove(this);}
    protected T initialValue() {return null;}

总结起来,ThreadLocal的原理就是通过为每个线程维护一个独立的变量副本来实现线程间的数据隔离。这种机制可以方便地在多线程环境下共享数据,同时保证每个线程访问的数据都是独立的。

http://www.lryc.cn/news/166884.html

相关文章:

  • Chrome 108版(64-bit 108.0.5359.125)网盘下载
  • Mars3d插件参考开发教程并在相关页面引入
  • Windows 性能突然打鸡血,靠 Bug 修复了多年顽疾
  • 亚马逊封买家账号的原因有哪些
  • 1.0零基础尝试DCM通讯(c-store)
  • vue之封装tab类组件
  • 固定资产管理中净值怎么算
  • SQlite操作后如何正确退出
  • phpcmsV9.6.0sql注入漏洞分析
  • 深入理解正则表达式:高效处理文本数据的利器
  • 张雪峰说网络空间安全专业
  • day11-ArrayList学生管理系统
  • java springboot 如何实现小程序支付
  • 题目:2839.判断通过操作能否让字符串相等 I
  • 【Prometheus】Prometheus+Grafana部署
  • 无CDN场景下的传统架构接入阿里云WAF防火墙的配置实践
  • 和鲸技术!国家气象信息中心人工智能气象应用基础技术平台上线
  • GIT高级使用技巧
  • JavaScript中的垃圾回收机制
  • Java替换 html 中隐藏的空格字符
  • 微博情绪分类
  • 探索项目追踪平台的多样性及功能特点
  • git简单命令
  • Fiber 架构的起源和含义
  • Vue3高频面试题+八股文
  • 对数据库三大范式的理解
  • (matplotlib)如何不显示x轴或y轴刻度(ticks)
  • U8用友ERP本地部署异地远程访问:内网端口映射外网方案
  • 怎么提取一个python文件中所有得函数名称
  • 企业架构LNMP学习笔记37