zoukankan      html  css  js  c++  java
  • 网络编程-线程-4、多个线程之间共享全局变量

    知识点:什么叫共享全局变量?

                  举个应用场景:假如我有俩个方法,一个执行下载图片的,一个执行将下载的图片整理后发送给别人,按照之前单任务的方法就是等下载完后,再去执行发送图片,多任务就是下载和发送一起运行,此时他们共享同一个图片数据,这个数据就是

                                           共享变量

    1、下面用一个简单的代码演示一下共享全局变量:

    # 定义一个全局变量,创建俩个线程,通过线程1区改变这个全局变量的值,你会发现线程2中的打印出来的全局变量值是线程1修改过后的值
    num = 100
    def test1():
        global num  # 因为num是不可变类型的,所以要修改全局变量的值必须加个global关键字才能修改它的值
        num += 1
        print('test1:%d'%num)
    def test2():
        print('test2:%d'%num)
    def main():
        t1 = threading.Thread(target=test1)
        t2 = threading.Thread(target=test2)
        t1.start()
        t2.start()
        print('num的值为:%d'%num)
    
    
    if __name__ == '__main__':
        main()

    运行结果如下:

    test1:101
    test2:101
    num的值为:101

     2、补充知识点:

    当我们创建线程的时候,如:t1 = threading.Thread(target=test1),我想往线程函数里传递参数怎么办呢?只需t1 = threading.Thread(target=test1,args=(需要传递的参数,)),args必须是一个元祖,以逗号隔开,看下面的例子:

    import threading
    
    
    
    def test1(temp):
        temp.append(33)  # 修改传递过来的列表
        print('test1-num:%s' % str(temp))
    
    
    def test2(temp):
        print('test2-num:%s' % str(temp))
    
    
    num = [11, 22]
    def main():
        t1 = threading.Thread(target=test1, args=(num,))  # 将num传递给线程函数test1,这里args是一个元祖,逗号一定要写
        t2 = threading.Thread(target=test2, args=(num,))  # 将num传递给线程函数test2
        t1.start()
        t2.start()
        print(num)
    运行结果如下:
    test1-num:[11, 22, 33]
    test2-num:[11, 22, 33]
    [11, 22, 33]


  • 相关阅读:
    JVM classloader
    面试整理
    工具配置链接
    IntelliJ IDEA 热部署
    IntelliJ IDEA 常用快捷键
    类文件结构
    判断对象存活的方法
    JVM 运行时数据区域
    vim编辑16进制
    阿里云yum源
  • 原文地址:https://www.cnblogs.com/lz-tester/p/9354213.html
Copyright © 2011-2022 走看看