zoukankan      html  css  js  c++  java
  • 多线程(类的形式)---线程同步

     1 import threading
     2 import time
     3 
     4 
     5 class myThread(threading.Thread):
     6     # 可选的类方法,初始化的方法
     7     def __init__(self, name):
     8         threading.Thread.__init__(self)  # 固定格式,继承了一个父类,父类中的初始化方法需要重新定义一下,所以必须写这句话
     9         self.name = name
    10 
    11     '''
    12     重写run方法
    13     没加锁之前:
    14     你不能确定run()在不同线程间的执行顺序,这个由cpu处理来决定的哦。
    15     也就是说,多线程在运行的时候,哪个线程块,哪个线程慢,哪个线程先运行,哪个线程后运行,我们是没有办法控制的,
    16     这个是由CPU控制的。所以你会发现每个人每次打印出来的效果都有可能不一样。
    17     '''
    18     def run(self):
    19         # 获得锁,成功获得锁之后返回True,可选的timeout参数不填时将一直阻塞直到获得锁定
    20         threadLock.acquire()
    21         # 调用函数book,并传递参数name
    22         book(self.name)
    23         # 释放锁,开始下一个线程
    24         threadLock.release()
    25 
    26 
    27 # 这个是我们在类外面自定义的函数
    28 def book(name):
    29     time.sleep(5)
    30     print(name)
    31 
    32 
    33 threadLock = threading.Lock()
    34 # 创建线程
    35 mt1 = myThread('hello,听说你中了大奖呀!恭喜你呀!')
    36 mt2 = myThread('谢谢谢谢,哈哈哈,运气好!')
    37 # 启动线程,每个线程对象必须至少调用一次该函数,他会自动调用run方法
    38 mt1.start()
    39 mt2.start()
    40 # 猜猜下面的代码如果打开,代码运行结果是什么?
    41 mt1.join(timeout=50)  # 阻塞线程,直到该线程执行完毕之后才会运行后面的代码
    42 mt2.join()
    43 print("哈哈,运气一直比较好啊。")
  • 相关阅读:
    C#中属性和字段的区别
    利用原生态的(System.Web.Extensions)JavaScriptSerializer将mvc 前台提交到controller序列化复杂对象
    点击图片后放大居中显示
    Python logging模块
    MySQL免安装版 配置
    python 字符串 常用方法
    python 格式化输出
    欢迎使用CSDN-markdown编辑器
    Program received signal SIGSEGV, Segmentation fault.
    error MSB6006: “CL.exe”已退出,代码为 -1073741502。
  • 原文地址:https://www.cnblogs.com/annatest/p/13353456.html
Copyright © 2011-2022 走看看