python学习笔记-tip55(ThreadLocal)

2018-12-01  本文已影响6人  黑键手记

引言

上一章,我们已经用到了多线程了,而且还用到了「全局变量」 :global 声明的变量,但是,其实在子线程中,使用子线程中的「局部变量」比使用「全局变量」要好一些,因为在使用「全局变量」的时候,会有多线程并发的问题,这时候还需要引入「线程锁」来解决。

但是,使用「局部变量」也是有一些问题 ,比如在函数调用中,传递起来比较麻烦,比如 A 函数调用 B 函数,A 函数同时也调用 C 函数,而A 函数中的局部变量需要传递到 B 中去,同时也要传递到 C中去,这样书写的话,就过于繁琐。

python 是谁呀,肯定会为我们提供方便操作的东西呀,这个东西就是今天的课题啦

ThreadLocal

ThreadLocal

其实,ThreadLocal 充当的角色,就如上面我提到的那个「容器」,他一般定义成「全局变量」,然后在子线程中,可以通过使用 ThreadLocal 的「装载」功能,对各个子线程所需要的「局部变量」进行存储,当子线程外需要数据时,直接从ThreadLocal中获取即可。

恩 ,如果上面的解释大家没有看懂的话,那么还是跟我来看一下实际使用吧
先将 ThreadLocal 的创建和使用 贴出来吧,方便查看

好,下面来看一下使用场景


由此可见,虽然 ThreadLocal 是全局变量,但是 ThreadLocal.student 这个则是每个线程独有的局部变量,且这连个局部变量虽然引用是一样的,其实不是同一个东西。

可以把 ThreadLocal 认为是一个 dict ,key 是子线程本身,value 而是存储的对象,只有通过子线程自己才能拿到对应的对象。

扩展一下

ThreadLocal 最长用的地方有以下几个方面:

总结

ThreadLocal 虽然是全局变量,但是每个线程都只能读写自己独立的版本。
ThreadLocal解决了在一个线程中多个函数之间相互传递的问题

上一篇下一篇

猜你喜欢

热点阅读