线程锁-LOCK

Posted pfeiliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程锁-LOCK相关的知识,希望对你有一定的参考价值。

from threading import Thread,Lock
import time
a=10
b=10
lock=Lock()
def fun():
# lock.acquire()
global a
global b
a+=1
time.sleep(1)
b+=1
# lock.release()
print("-a{}--b{}-->".format(a,b))

if __name__=="__main__":
start=time.time()
l=[]
for i in range(10):
t=Thread(target=fun)
l.append(t)
t.start()
for i in l:
i.join()
end=time.time()
print("end--------",end-start,a,b)

-a20--b11-->-a20--b12-->
-a20--b13-->

-a20--b14-->-a20--b15-->

-a20--b16-->
-a20--b17-->
-a20--b18-->
-a20--b19-->
-a20--b20-->
end-------- 1.003110408782959 20 20

由于线程间数据是共享的,多个线程共同操作一个对象,可能造成无法预期的结果。

如果把lock.acquire(),lock.release()取消注释

运行结果如下

-a11--b11-->
-a12--b12-->
-a13--b13-->
-a14--b14-->
-a15--b15-->
-a16--b16-->
-a17--b17-->
-a18--b18-->
-a19--b19-->
-a20--b20-->
end-------- 10.004825592041016 20 20

结果和预期的一样,但是时间也由1s变为10s了

以上是关于线程锁-LOCK的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程——Lock&Condition

ReentrantReadWriteLock场景应用

Java多线程与并发库高级应用-工具类介绍

并发包java.util.concurrent.locks.Lock

互斥锁 & 共享锁

同步锁之lock