#!/usr/local/bin/python3
"""
多線程程序如果沒有競爭資源的場景那么通常會比較簡單
臨界資源 - 被多個線程競爭的資源
當(dāng)多個線程競爭臨界資源的時候如果缺乏必要的保護措施就會導(dǎo)致數(shù)據(jù)錯亂
"""
import time
import threading
from concurrent.futures import ThreadPoolExecutor
class Account(object):
"""銀行賬戶"""
def __init__(self):
self.balance = 0.0
self.lock = threading.Lock()
def deposit(self, money):
# 通過鎖保護臨界資源
# 可以寫try-finally也可以使用上下文語法
# self.lock.acquire()
# try:
# pass
# finally:
# self.lock.release()
with self.lock:
new_balance = self.balance + money
time.sleep(0.001)
self.balance = new_balance
def add_money(account, money):
account.deposit(money)
# 自定義線程類
class AddMoneyThread(threading.Thread):
def __init__(self, account, money):
self.account = account
self.money = money
# 自定義線程的初始化方法中必須調(diào)用父類的初始化方法
super().__init__()
# run方法是線程啟動之后要執(zhí)行的回調(diào)方法(鉤子函數(shù))
# 所以啟動線程不能夠直接調(diào)用run方法而是通過start方法啟動線程
# 什么時候需要使用回調(diào)式編程?
# 你知道要做什么但不知道什么時候會做這件事情
def run(self):
# 線程啟動之后要執(zhí)行的操作
pass
def main():
account = Account()
# 創(chuàng)建線程池
pool = ThreadPoolExecutor(max_workers=10)
futures = []
for _ in range(100):
# 創(chuàng)建線程的第1種方式
# threading.Thread(
# target=add_money, args=(account, 1)
# ).start()
# 創(chuàng)建線程的第2種方式
# AddMoneyThread(account, 1).start()
# 創(chuàng)建線程的第3種方式
# 調(diào)用線程池中的線程來執(zhí)行特定的任務(wù)
future = pool.submit(add_money, account, 1)
futures.append(future)
# 關(guān)閉線程池
pool.shutdown()
for future in futures:
future.result()
print(account.balance)
if __name__ == '__main__':
main()
并發(fā)編程—創(chuàng)建多線程的三種方式
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門溉瓶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來急鳄,“玉大人,你說我怎么就攤上這事堰酿〖埠辏” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵触创,是天一觀的道長坎藐。 經(jīng)常有香客問我,道長哼绑,這世上最難降的妖魔是什么岩馍? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮抖韩,結(jié)果婚禮上蛀恩,老公的妹妹穿的比我還像新娘。我一直安慰自己茂浮,他們只是感情好双谆,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著席揽,像睡著了一般佃乘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驹尼,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亏吝!你這毒婦竟也來了岭埠?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布旷太,位于F島的核電站拙绊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泳秀。R本人自食惡果不足惜标沪,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗜傅。 院中可真熱鬧金句,春花似錦、人聲如沸吕嘀。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽偶房。三九已至趁曼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棕洋,已是汗流浹背挡闰。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 眾所周知創(chuàng)建線程的方式有兩種:1.繼承Thread類次绘。2.實現(xiàn)Runnable接口瘪阁。從jdk1.5開始撒遣,提供了另一...
- 1,繼承Thread 主要掌握:線程的初始化管跺,啟動义黎,中斷的正確處理方式(interrupted) public c...
- 方法一:繼承Thread類,作為線程對象存在(繼承Thread對象) 常規(guī)方法伙菜,不多做介紹了,interrupte...
- 多線程的創(chuàng)建方式 定義 Thread 類的子類創(chuàng)建 多次執(zhí)行程序得到的結(jié)果可能不同 創(chuàng)建 Runnable 接口實...