ThreadLocal 并不是Thread,是thread的局部变量,应该叫ThreadLocalVariable不知道哪个驴踢的起了个这个名字,就想叫隔壁二大爷家的狗叫“”二大爷“”,搞得大家一头雾水。
ThreadLocal 比不是并发访问一个共同对象,是为每个线程分配一个属于该线程的变量,就是每个线程有有一个副本。
ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程的上下文。
发明ThreadLocal的初衷是为了提供线程内的局部变量,不是为了解决共享多线程的访问问题,,实际上根本就解决不了,不过很多博客都没说,巴拉巴拉一顿裹脚布的长度,好像很厉害的多线程工具。
这里引用https://www.jianshu.com/p/09ceb962894d的例子。
1. 演化过程
以实际生活中的银行业务办理模型,解释ThreadLocal的诞生过程。读者们可以看到:随着业务模型的不断扩展,代码逻辑变得更加复杂,经过不断优化代码结构的过程,演化出了ThreadLocal这个编程工具
1. 1初始形态
大家去银行办理业务时,如果需要排队等候,则会领取一个排队号,直到叫号才能办理业务。
我们把每一笔业务(Transaction)抽象为一个线程,每一笔业务都有一个唯一的标识(id)。
```java
class Transaction extends Thread
{
privateintid;
publicvoidrun()
{
if(wait)
{
...// Waiting}
else{
...// Start transaction
}
}
}
```java
网友评论