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