多线程-银行账户管理

""" __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()

    推荐阅读