摘要:在实现多线程业务时,如果没有涉及到共享数据处理的业务,还是使用局部变量,必将,在处理共享数据时,还是需要加锁线程与线程间的局部变量相互独立,变量的处理互补干扰。
在实现多线程业务时,如果没有涉及到共享数据处理的业务,还是使用局部变量,必将,在处理共享数据时,还是需要加锁;线程与线程间的局部变量相互独立,变量的处理互补干扰。
在多线程的场景下,针对线程中的局部变量,如果需要让其他业务操作此变量时,此时
局部变量相对当前线程来讲,是全局变量;
局部变量相对其他线程来讲,是局部变量;
为了实现当前线程的局部变量被部分业务处理时,以两个小例子说明下
示例 1:自定义全局变量,以当前线程做为 key# -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals from threading import current_thread, Thread global_variable = {} def handler(): std = global_variable[current_thread()] print "Hello {} and this thread"s name is {}".format(std, current_thread().name) def test_thread(name): global_variable[current_thread()] = name handler() t1 = Thread(target=test_thread, args=("Kobe", ), name="thread_kobe") t2 = Thread(target=test_thread, args=("TMC", ), name="thread_tmc") t1.start() t2.start() t1.join() t2.join() print global_variable print "end......"
运行结果:
Hello Kobe and this thread"s name is thread_kobe Hello TMC and this thread"s name is thread_tmc {: u"Kobe", : u"TMC"} end......
这样,当前线程的数据不会被其他线程捕捉和处理,但是不建议这么做,毕竟 threading 模块提供了 local
示例 2:使用 local# -*- coding: utf-8 -*- from __future__ import absolute_import, unicode_literals from threading import current_thread, Thread, local local_variable = local() def handler(): std = local_variable.name print "Hello {} and this thread"s name is {}".format(std, current_thread().name) def test_thread(name): local_variable.name = name handler() t1 = Thread(target=test_thread, args=("Kobe", ), name="thread_kobe") t2 = Thread(target=test_thread, args=("TMC", ), name="thread_tmc") t1.start() t2.start() t1.join() t2.join() print local_variable print "end......"
运行结果如下:
Hello Kobe and this thread"s name is thread_kobe Hello TMC and this thread"s name is thread_tmcend......
参考
http://yangcongchufang.com/%E...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/38640.html
摘要:我们知道多线程环境下,每一个线程均可以使用所属进程的全局变量。在线程中使用局部变量则不存在这个问题,因为每个线程的局部变量不能被其他线程访问。 我们知道多线程环境下,每一个线程均可以使用所属进程的全局变量。如果一个线程对全局变量进行了修改,将会影响到其他所有的线程。为了避免多个线程同时对变量进行修改,引入了线程同步机制,通过互斥锁,条件变量或者读写锁来控制对全局变量的访问。 只用全局变...
摘要:那线程局部变量就是每个线程都会有一个局部变量,独立于变量的初始化副本,而各个副本是通过线程唯一标识相关联的。移除此线程局部变量当前线程的值。如果此线程局部变量随后被当前线程读取,且这期间当前线程没有设置其值,则将调用其方法重新初始化其值。 前言 ThreadLocal网上资料很多,那我为什么还要写下这篇文章呢?主要是想汇聚多篇文章的优秀之处以及我对于ThreadLocal的理解来加深印...
摘要:线程的生命周期线程的生命周期大致可以分为下面五种状态新建状态就绪状态运行状态休眠状态终止状态新建状态,是线程被创建且未启动的状态这里的创建,仅仅是在的这种编程语言层面被创建,而在操作系统层面,真正的线程还没有被创建。 概要 目前CPU的运算速度已经达到了百亿次每秒,甚至更高的量级,家用电脑即使维持操作系统正常运行的进程也会有数十个,线程更是数以百计。 线程是CPU的调度和分派的基本单位...
摘要:并没有提供语言级的线程局部变量,而是在类库里提供了线程局部变量的功能,也就是这次的主角类。 Yuicon 转载请注明原创出处,谢谢! 序 在多线程环境下,访问非线程安全的变量时必须进行线程同步,例如使用synchronized方式访问HashMap实例。但是同步访问会降低并发性,影响系统性能。这时候就可以用空间换时间,如果我们给每个线程都分配一个独立的变量,就可以用非同步的方式使用非...
阅读 3318·2023-04-25 16:25
阅读 3823·2021-11-15 18:01
阅读 1600·2021-09-10 11:21
阅读 3007·2021-08-02 16:53
阅读 3081·2019-08-30 15:55
阅读 2489·2019-08-29 16:24
阅读 2098·2019-08-29 13:14
阅读 1027·2019-08-29 13:00