import threading
import time
def DiYi():
for i in range(4):
print('第一',i)
time.sleep(1)
def DiEr():
for i in range(4):
print('第二',i)
time.sleep(1)
def ddd():
t1 = threading.Thread(target=DiYi) # 创建多线程对象
t2 = threading.Thread(target=DiEr)
t1.start() # 调用对象
t2.start()
JinChengShuLiang = len(threading.enumerate()) # 获取当前程序的所有线程个数(包括主线程)
print('当前线程数是:',JinChengShuLiang)
#--------------------------------以上是多线程教基础-------------------------------------------------
# 从线程内传入参数给函数
def hello(name,t):
# 这是线程的主函数
print('name参数是:',name)
print('t参数是:',t)
def xiancheng():
A = threading.Thread(target=hello,args=('A','100',))
B = threading.Thread(target=hello,args=('B','200',))
A.start()
B.start()
class Abc(threading.Thread):
def run(self): # 一定要run
print('')
# ---------------如果两个线程同时修改一个全局变量时,可能会发生错误,此时需要上锁---------------------------
# ···························适用于同步修改同一个变量···················································
# 同一个锁如果启用了,再次遇到启用锁就会堵在这不会往下执行,等之前启用锁的地方执行完关闭锁
suo = threading.Lock() # 创建锁
shuzi = 0
def naem1(int1):
global shuzi,suo
# 也可以把锁放在循环外面,先加完一个在加另一个,或者两个同时加
# suo.acquire() # 启用锁
for i in range(int1):
suo.acquire() # 启用锁
shuzi += 1
suo.release() # 关闭
# suo.release() # 关闭锁
print('name1执行完成,name1是:',shuzi)
def name2(int1):
global shuzi,suo
# suo.acquire() # 启用锁
for i in range(int1):
suo.acquire() # 启用锁
shuzi += 1
suo.release() # 关闭锁
# suo.release() # 关闭锁
print('name2执行完成,name2是:',shuzi)
def name_ZhuHanShu():
global shuzi
t1 = threading.Thread(target=naem1,args=(1000000,))
t2 = threading.Thread(target=name2,args=(1000000,))
time.sleep(10)
print('shuzi的最终结果是:',shuzi)
t1.start()
t2.start()
if __name__ == '__main__':
name_ZhuHanShu()