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