多线程(类的形式)---线程同步

 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("哈哈,运气一直比较好啊。")

 

posted @ 2020-07-21 10:06  anna1210  阅读(188)  评论(0编辑  收藏  举报