InheritableThreadLocal原理和ThreadLocal原理

ThreadLocal 和 InheritableThreadLocal 都是 Java 中用于实现线程私有变量的类,它们的原理和用途略有不同。

  1. ThreadLocal 的原理:

    • 每个线程都有一个独立的 ThreadLocal 实例,用于存储线程私有的变量副本。

    • 当通过 ThreadLocal 的 get() 方法获取变量值时,实际上是通过当前线程对象作为 key,在 ThreadLocalMap 中查找对应的 value(变量副本)。

    • 每个 ThreadLocal 实例内部都有一个 ThreadLocalMap 对象,用于存储线程与变量副本之间的映射关系。

    • 当第一次调用 ThreadLocal 的 get() 方法时,如果当前线程没有与之对应的变量副本,ThreadLocal 会调用 initialValue() 方法创建一个初始值作为变量副本,并将其存储在 ThreadLocalMap 中。

    • 后续调用 get() 方法时,直接从 ThreadLocalMap 中获取变量副本。

    • 在线程执行完毕后,ThreadLocalMap 会随着线程的销毁而销毁,从而清除线程相关的变量副本。

  2. InheritableThreadLocal 的原理:

    • InheritableThreadLocal 是 ThreadLocal 的一个子类,它的作用是在父线程和子线程之间共享变量副本。

    • InheritableThreadLocal 使用了线程继承的机制,即子线程可以从父线程继承父线程的 InheritableThreadLocal 变量的副本。

    • 在父线程中创建的 InheritableThreadLocal 变量的副本会被传递给子线程,子线程可以通过 InheritableThreadLocal 的 get() 方法获取父线程设置的变量副本。

    • 类似 ThreadLocal,每个线程都有一个 InheritableThreadLocalMap 对象,用于存储线程与变量副本之间的映射关系。

    • 当子线程创建时,会从父线程的 InheritableThreadLocalMap 中复制变量副本,并将其存储在子线程的 InheritableThreadLocalMap 中,以实现变量的共享。

需要注意的是,InheritableThreadLocal 并不适用于所有场景,它的使用可能会导致线程间的耦合性增加,且在高并发环境下需要注意对共享变量的并发访问问题。在选择使用 ThreadLocal 或 InheritableThreadLocal 时,需要根据具体的业务场景和线程之间的关系来进行权衡和选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InheritableThreadLocalJava中的一个类,它是ThreadLocal类。它的原理是在父线程线程之间传递数据。当一个线程创建线程时,线程会继承父线程中的InheritableThreadLocal变量的值。这样,通过InheritableThreadLocal,父线程中设置的值可以在线程中获取到。 InheritableThreadLocal类中有一个protected方法childValue,该方法用于定义线程在继承父线程InheritableThreadLocal变量时如何处理值。默认情况下,childValue方法返回父线程中的值。 此外,InheritableThreadLocal类还包含了一些其他方法,比如getMap方法用于获取当前线程InheritableThreadLocalMap对象,createMap方法用于创建当前线程InheritableThreadLocalMap对象并初始化第一个值。通过这些方法,InheritableThreadLocal能够实现父线程之间的值传递。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [InheritableThreadLocal 实现原理](https://blog.csdn.net/mccand1234/article/details/116357251)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值