import threading,time
'''
线程同步,使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到 acquire() 和 release() 方法之间
'''
class Mthread(threading.Thread):
'''
Lock()在同一方法中只能使用一次acquire(),否则会死锁
Rlock()在同一方法中可使用多次acquire(),但是也必须执行同样次数的release(),否则会死锁
'''
threadLock=threading.Lock()#这里可以换成RLock
def __init__(self,id,name,counter):
threading.Thread.__init__(self)
self.id=id
self.name=name
self.counter=counter
def run(self):
print('开启线程。。。'+self.name)
#获取锁,用做同步
self.threadLock.acquire()
self.print_time(self.name,self.counter,3)
#释放锁,开启下一个线程
self.threadLock.release()
def print_time(self,threadname,delay,counter):
while counter:
time.sleep(delay)
print("{},{}".format(threadname,time.ctime(time.time())))
counter-=1
#创建新线程
thread1 = Mthread(1,'thread-1',1)
thread2 = Mthread(2,'thread-2',2)
#开启新线程
thread1.start()
thread2.start()
#添加线程到线程列表
thread=[thread1,thread2]
#等待所有线程执行完毕
for x in thread:
x.join()
print('所有线程执行完毕,退出主线程')