Python-100-Days/Day13/multithread5.py

64 lines
1.3 KiB
Python

"""
多个线程共享数据 - 没有锁的情况
Version: 0.1
Author: 骆昊
Date: 2018-03-20
"""
from time import sleep
from threading import Thread, Lock
class Account(object):
def __init__(self):
self._balance = 0
self._lock = Lock()
def deposit(self, money):
# 先获取锁才能执行后续的代码
self._lock.acquire()
try:
new_balance = self._balance + money
sleep(0.01)
self._balance = new_balance
finally:
# 这段代码放在finally中保证释放锁的操作一定要执行
self._lock.release()
@property
def balance(self):
return self._balance
class AddMoneyThread(Thread):
def __init__(self, account, money):
super().__init__()
self._account = account
self._money = money
def run(self):
self._account.deposit(self._money)
def main():
account = Account()
threads = []
# 创建100个存款的线程向同一个账户中存钱
for _ in range(100):
t = AddMoneyThread(account, 1)
threads.append(t)
t.start()
# 等所有存款的线程都执行完毕∫
for t in threads:
t.join()
print('账户余额为: ¥%d' % account.balance)
if __name__ == '__main__':
main()