""" __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()
多线程-银行账户管理
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。