1.以类的方式实现多线程
多线程实现每秒打印当前时间和每两秒打印一次张三,打印四次结束(因为打印当前时间是无限循环,因此当四次张三打印完之后结束主动线程)
import threading#导入线程类
import time#导入时间类
class MyTheard1(threading.Thread):#类的继承
def __init__(self,name):
super(MyTheard1, self).__init__()
self.name = name
def run(self):
for i in range(4):#for循环,打印四次结束
time.sleep(2)#休眠两秒打印
print("张三")
class MyTheard2(threading.Thread):#类的继承
def __init__(self,name):
super(MyTheard2, self).__init__()
self.name = name
def run(self):
while True:
time.sleep(1)#休眠一秒
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))#格式化为输出时间格式
#实例化对象
r1 = MyTheard1("法外狂徒")
r2 = MyTheard2("实时播报")
#线程启动
r1.start()
r2.start()
结果是
2022-01-11 12:55:37
张三
2022-01-11 12:55:38
2022-01-11 12:55:39
张三
2022-01-11 12:55:40
2022-01-11 12:55:41
张三
2022-01-11 12:55:42
2022-01-11 12:55:43
张三
2022-01-11 12:55:44
2022-01-11 12:55:45
2. 线程锁
import threading
def run():
global x
lock.acquire()
x += 1
lock.release()
if __name__ == '__main__':
x = 0
res = []
lock = threading.Lock()
for i in range(100):
t = threading.Thread(target=run)
t.start()
res.append(t)
for t in res:
t.join()
print(x)
结果:
100
3.递归锁
import threading
def run1():
global x
lock.acquire()
x += 1
lock.release()
return x
def run2():
global y
lock.acquire()
y += 1
lock.release()
return y
def run3():
lock.acquire()
res1 = run1()
res2 = run2()
lock.release()
print(res1, res2)
if __name__ == '__main__':
x = 0
y = 0
lock = threading.RLock()
for i in range(50):
t = threading.Thread(target=run3)
t.start()
while threading.active_count() != 1:
print(f"正在运行个{threading.active_count()}线程")
print("程序运行结束")