from time import sleep
from threading import thread, lock
class
account
(object):
def__init__
(self):
self._balance = 0
self._lock = lock()
defdeposit
(self, money):
# 先獲取鎖才能執行後續的**
self._lock.acquire()
try:
new_balance = self._balance + money
sleep(0.01)
self._balance = new_balance
finally:
# 這段**放在finally中保證釋放鎖的操作一定要執行
self._lock.release()
@property
defbalance
(self):
return self._balance
class
addmoneythread
(thread):
def__init__
(self, account, money):
super().__init__()
self._account = account
self._money = money
defrun(self):
self._account.deposit(self._money)
defmain
(): account = account()
threads =
# 建立100個存款的執行緒向同乙個賬戶中存錢
for _ in range(100):
t = addmoneythread(account, 1)
t.start()
# 等所有存款的執行緒都執行完畢∫
for t in threads:
t.join()
print('賬戶餘額為: ¥%d元' % account.balance)
if __name__ == '__main__':
main()
6 多個執行緒的共享資料
1 方式 1,如果每個執行緒執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料,例如,賣票系統就可以這麼做。2,如果每個執行緒執行的 不同,這時候需要用不同的runnable物件,例如,設計4個執行緒。其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減1,...
多個執行緒間如何共享資料?
如果每個縣城執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料。將共享資料封裝成另乙個物件,然後將這個物件逐一傳遞給各個runnable物件,每個執行緒對共享資料的操作方法也分配到那個物件身上,這樣容易實現針對資料進行各個操作的互斥和通訊。將runnable物...
java併發 多個執行緒間共享資料
先看乙個多執行緒間共享資料的問題 設計四個執行緒,其中兩個執行緒每次對data增加1,另外兩個執行緒每次對data減少1。從問題來看,很明顯涉及到了執行緒間通資料的共享,四個執行緒共享乙個data,共同操作乙個data。我們先把上面這個問題放在一邊,慢慢分析多個執行緒之間共享資料的一些情況,從最簡單...