ThreadLocalMap中key为ThreadLocal,ThreadLocal是每个线程唯一的,所以是不是所有线程数据都保存在一个ThreadLocalMap内
时间: 2023-11-21 18:55:27 浏览: 100
ThreadLocal跨线程问题
5星 · 资源好评率100%
不是所有线程的数据都保存在同一个ThreadLocalMap内。每个线程都有自己的ThreadLocalMap实例,ThreadLocalMap中的key是ThreadLocal实例,value是对应线程的变量值。当多个线程使用同一个ThreadLocal实例时,每个线程都会有自己的变量值,互不干扰。因此,ThreadLocal实现了线程间数据的隔离。
下面是一个示例代码,演示了如何使用ThreadLocal实现线程间数据隔离:
```python
import threading
# 创建ThreadLocal实例
mydata = threading.local()
# 定义线程函数
def func():
# 在ThreadLocal中保存数据
mydata.x = 0
for i in range(1000000):
# 访问ThreadLocal中的数据
mydata.x += 1
# 打印ThreadLocal中的数据
print(threading.current_thread().name, mydata.x)
# 创建两个线程并启动
t1 = threading.Thread(target=func)
t2 = threading.Thread(target=func)
t1.start()
t2.start()
t1.join()
t2.join()
```
运行上述代码,可以看到输出结果为:
```
Thread-1 1000000
Thread-2 1000000
```
可以看到,每个线程都有自己的变量值,互不干扰。
阅读全文