java.lang.ThreadLocal

java.lang.ThreadLocal 提供了一种解决多线程并发问题的新思路。

官方 API 文档描述如下:
This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of the variable. ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread (e.g., a user ID or Transaction ID).

中文翻译:
此类提供了线程局部(thread-local)变量。这些变量不同于他们的普通副本之处在于,每个线程都可以通过 get 或 set 方法存取自己的局部变量,每个线程的局部变量都是独立于该变量的初始化副本。ThreadLocal 实例在所属类中通常是 private static 类型属性,以此希望将状态和某一线程关联起来。

ThreadLocal 并非线程的本地实现,也不是线程,而是“线程局部变量”。使用 ThreadLocal 维护变量时,ThreadLocal 会为每个使用该变量的线程提供一个独立的副本,因此每个线程都可以独立使用和修改自己的副本而不影响其它并发线程对应的副本。

从线程角度出发,每个线程都有一个对应的局部变量副本,通过 ThreadLocal 存取的数据总是与当前线程相关,JVM 为每个运行线程绑定了私有的本地实例存储空间,从而为多线程并发访问提供了隔离机制。

ThreadLocal 中定义了一个静态内部类 ThreadLocalMapThreadLocalMap 是一个定制的 Hash Map,只适用于维护线程局部变量,存储每个线程对应的变量副本。ThreadLocalMap 实现了键值对的读取和设置。每个线程都有一个独立的 ThreadLocalMap 副本,其所存储的值只能被当前线程存取。ThreadLocal 通过操作每个线程持有的 ThreadLocalMap 副本实现并发线程中对统一变量存取的隔离。

(待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又言又语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值