一.介紹threading模塊中的Lock類,Lock類中包含的方法:
1.acquire(blocking=True,timeout=-1)
方法的含義:以阻塞或非阻塞的狀態(tài)獲取一個鎖
自己的理解:
1.blocking=True,timeout=-1馬上就能獲得鎖,獲得不了就一直等著,直到鎖被別的線程釋放
2.blocking = True,timeout = 2允許它等2s,等了2s也獲得不了鎖,那就不去獲得鎖了,繼續(xù)接下來的代碼
3.blocking = False,當(dāng)blocking=False的時候,不能傳入timeout參數(shù)。即不允許它等一會,馬上就去獲得鎖,無法獲得,那就不要這個鎖了,繼續(xù)接下來的代碼
二.
blocking=True,timeout=-1代碼:

image.png

image.png
線程1acquire了鎖,因為Lock不支持可重入,所以線程2一直在等待中。線程1打印完“我是被1上鎖的”之后又重新去acquire鎖。但是Lock對象不支持可重入。因為此時Lock對象已經(jīng)為上鎖狀態(tài),所以線程1也要繼續(xù)等待。線程1和線程2同時無限等待。導(dǎo)致程序阻塞,不能向下進(jìn)行。
blocking = True,timeout = 2
image.png

image.png
線程1先acquire了鎖,然后time.sleep(4),然后又將鎖釋放了。線程2等了2s然后,沒有獲得鎖,就繼續(xù)執(zhí)行接下來的代碼了,運行到lock1.release()的時候,因為鎖已經(jīng)被線程1釋放了,所以線程2去釋放鎖會報錯
blocking = False
image.png
同上