- 首页 > it技术 > >
""" __author__ = 王梁旭"""
import time
from threading import Thread, Lock"""
多线程模拟银行到账操作:一百个账户同时转账到账户(操作存在延迟)
(由于系统存在延迟,在系统睡眠时,其它线程会调用数据,使结果被未知次覆盖,
最后不能得到正确的数据)
(给数据加线程锁,保证一个数据一把锁,会使数据调用变得像排队一样,
一个数据调用结束后开锁后才能被下一个线程调用)
"""class Account:
"""
账户类
"""
def __init__(self):
self.balance = 0.0
self.lock = Lock()def deposit(self, money):
# 给线程加锁
with self.lock:
new_balance = self.balance + money
time.sleep(0.001)# 模拟延迟
self.balance = new_balance
# with 之后自动解锁def main():
"""
多线程创建一百个账户转账进入账户
:return: 0
"""
account = Account()
threads = []
for _ in range(100):
# 起一个线程对象
t = Thread(target=account.deposit, args=(1,))
# 将线程对象存入列表
threads.append(t)
# 开启线程
t.start()
for t in threads:
# 线程对象加 join() ,执行该对象完之后在执行后面的方法
t.join()
print(account.balance)if __name__ == '__main__':
main()
推荐阅读