#!/usr/bin/python # -- coding: utf-8 -- # @Time : 2019/8/5 13:43 # @Author : lin # @File : demo1.py # @Software: PyCharm import threading import time def say(): print(“hhhhh\t”) time.sleep(1) if name == ‘main’: for i in range(5): t = threading.Thread(target=say) #say()调用函数,say找到函数地址 t.start() # 第二种方法 类(封装,继承,多态) 适合线程复杂情况 class MyThread(threading.Thread): def run(self): #必须写 for i in range(3): time.sleep(1) print(“sdasa”) self.login() def login(self): print(“login…”) if name ==“main”: t = MyThread() t.start() #不是t.run()方法,start()自动调用run() t.login() #对象里的一个方法 #全局变量,要修改变量还是修改其空间中的数据 num = 100 nums = [11,2] def test(): global num num +=100 print(num) def test2(): nums.append(111) # nums=nums+[111] error print(nums) print(num) print(nums) test() test2() muns =[11,22] mun =100 def test(req): global mun mun +=1 print(mun) req.append(33) print(str(req)) def test1(): print(mun) print(muns) #共享 def main(): t1=threading.Thread(target=test,args=(muns,)) t2=threading.Thread(target=test1) t1.start() time.sleep(1) t2.start() time.sleep(1) print(mun) #子线程共享全局变量 if name == ‘main’: main() #共享全局变量会引起资源竞争,应用lock锁 #方法 1.创建互斥锁 2.上锁(成功或者阻塞) 3.解锁 g_num = 0 mutex = threading.Lock() def test1(num): global g_num mutex.acquire() for i in range(num): g_num +=1 mutex.release() # for i in range(num): # mutex.acquire() # g_num += 1 # mutex.release() print("----%d"%g_num) def test2(num): global g_num mutex.acquire() for i in range(num): g_num+=1 mutex.release() # for i in range(num): # mutex.acquire() # g_num += 1 # mutex.release() print("----%d"%g_num) def main(): t1 =threading.Thread(target=test1,args=(1000000,)) t2 =threading.Thread(target=test2,args=(1000000,)) t1.start() #----1209445 ----1000000 t2.start() # ----1558667 ----2000000 time.sleep(4) if name == ‘main’: main() print(g_num) #互斥锁会产生死锁,故1.银行家算法 2.添加超时时间(超时终止)