qwx

以下代码可以直观展示加锁和不加锁时,线程运行的顺序。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import threading
import time
class MyThread(threading .Thread ):
    def __init__(self,delay,name,count):
        threading .Thread .__init__(self)
        self .delay=delay
        self.name=name
        self.count=count
    def run (self):
        print('starting'+ self.name )
        threadLock.acquire()
        # 获得锁,成功获得锁定后返回True
        # 可选的timeout参数不填时将一直阻塞直到获得锁定
        # 否则超时后将返回False 
        print_time(self.delay ,self.name ,self.count)
        # 释放锁
        threadLock.release()
def print_time(delay,name,count):
    while count :
        time.sleep(delay )
        print("{}:{}".format(name, time.ctime(time.time())))
        count  -= 1
threadLock=threading.Lock()
#创建容器(列表)
threads=[]
# 创建新线程
thread1=MyThread(1,'thread-1',3)
thread2=MyThread(2,'thread-2',3)
# 开启新线程
thread1.start()
thread2 .start()
# 添加线程到线程容器(列表)
threads .append(thread1 )
threads .append(thread2 )
# 等待所有线程完成
for t in threads :
    t.join()
print('Exiting Main Thrid')

加锁时:

startingthread-1startingthread-2
thread-1:Fri Oct 25 00:44:39 2019thread-1:Fri Oct 25 00:44:40 2019thread-1:Fri Oct 25 00:44:41 2019thread-2:Fri Oct 25 00:44:43 2019thread-2:Fri Oct 25 00:44:45 2019thread-2:Fri Oct 25 00:44:47 2019Exiting Main Thrid

不加锁时:

startingthread-1startingthread-2
thread-1:Fri Oct 25 00:48:56 2019thread-2:Fri Oct 25 00:48:57 2019thread-1:Fri Oct 25 00:48:57 2019thread-1:Fri Oct 25 00:48:58 2019thread-2:Fri Oct 25 00:48:59 2019thread-2:Fri Oct 25 00:49:01 2019
Exiting Main Thrid