摘要:接前兩篇文章我是一個(gè)線程上中其實(shí)這次遇險(xiǎn)我應(yīng)該能夠預(yù)想到才對(duì),太大意了。可我萬萬沒想到的是,還有一個(gè)線程,對(duì),就是竟然同時(shí)在從這個(gè)導(dǎo)演到往這個(gè)演員轉(zhuǎn)賬。我們這一代線程池完成了使命。下一代線程池將很快重生。
接前兩篇文章:我是一個(gè)線程(上) (中)
其實(shí)這次遇險(xiǎn)我應(yīng)該能夠預(yù)想到才對(duì), 太大意了。
前幾天我處理過一些從http 發(fā)來的存款和取款的包裹, 老線程0x6900 特意囑咐我:
"處理這些包裹的時(shí)候要特別小心, 你得一定要先獲得一把鎖, 在對(duì)賬戶存款或者取款的時(shí)候一定要把賬戶給鎖住, 要不然別的線程就會(huì)在你等待的時(shí)候趁虛而入,搞破壞, 我年輕那會(huì)兒很毛糙,就捅了簍子"
為了“恐嚇”我, 好心的0x6900還給了我兩個(gè)表格:
(1)沒有加鎖的情況
(2)加鎖的情況
我看的膽顫心驚, 原來不加鎖會(huì)帶來這么嚴(yán)重的事故。
從此以后看到存款,取款的包裹就倍加小心, 還好,沒有出過事故。
今天我收到的一個(gè)包裹是轉(zhuǎn)賬, 從某著名演員的賬號(hào)給某著名導(dǎo)演賺錢, 具體是誰我就不透漏了, 數(shù)額可真是不小
我按照老線程的吩咐, 肯定要加鎖啊, 先對(duì)著名演員賬號(hào)加鎖, 在對(duì)著名導(dǎo)演賬號(hào)加鎖。
可我萬萬沒想到的是, 還有一個(gè)線程,對(duì),就是0x7954, 竟然同時(shí)在從這個(gè)導(dǎo)演到往這個(gè)演員轉(zhuǎn)賬。
于是乎,就出現(xiàn)了這么個(gè)情況:
剛開始我還不知道什么情況, 一直坐在等待車間傻等, 可是等的時(shí)間太長了, 長達(dá)幾十秒 ! 我可從來沒有經(jīng)歷過這樣的事件。
這時(shí)候我就看到了線程0x7954 , 他悠閑的坐在那里喝咖啡, 我和他聊了起來:
“哥們, 我看你已經(jīng)喝了8杯咖啡了, 怎么還不去干活?”
“你不喝了9杯茶了嗎?” 0x7954 回敬到。
“我在等一個(gè)鎖, 不知道哪個(gè)孫子一直不釋放”
“我也在等鎖啊,我要是知道哪個(gè)孫子不釋放鎖我非揍死他不可 ” 0x7954 毫不示弱。
我偷偷的看了一眼, 這家伙懷里不就抱著我正在等的 某導(dǎo)演的鎖嘛?
很明顯, 0x7954 也發(fā)現(xiàn)了我正抱著他正在等待的鎖。
很快我們兩個(gè)就吵了起來, 互不相讓:
"把你的鎖先給我, 讓我先做完"
"不行, 從來都是做完工作才釋放鎖, 現(xiàn)在絕對(duì)不能給你"
從爭吵到打起來, 就那么幾秒鐘的事兒。
更重要的是, 我們倆不僅僅持有這個(gè)著名導(dǎo)演和演員的鎖, 還有很多其他的鎖, 導(dǎo)致等待的線程越來越多, 圍觀的人們把屋子都擠滿了。
最后事情真的鬧大了, 我從來沒見過終極大boss "操作系統(tǒng)" 也來了。
大Boss畢竟是見多識(shí)廣, 他看了一眼, 哼了一聲 , 很不屑的說:
"又出現(xiàn)死鎖了"
"你們倆要Kill掉一個(gè), 來吧, 過來抽簽 "
這一下子把我給嚇尿了, 這么嚴(yán)重啊!
我戰(zhàn)戰(zhàn)兢兢的抽了簽,打開一看, 是個(gè)"活"字。
唉,小命終于保住了。
可憐的0x7954 被迫交出了所有的資源以后, 很不幸的被kill掉, 消失了。
我拿到了導(dǎo)演的鎖, 可以開始干活了。
大Boss操作系統(tǒng)如一陣風(fēng)似的消失了, 身后只傳來他的聲音:
記住, 我們這里導(dǎo)演>演員, 無論認(rèn)識(shí)情況都要先獲得導(dǎo)演的鎖
由于不僅僅是只有導(dǎo)演和演員, 還有很多其他人, Boss留下了一個(gè)表格, 里邊是個(gè)算法, 用來計(jì)算資源的大小, 計(jì)算出來以后,永遠(yuǎn)按照從大到小的方式來獲得鎖:
我回到線程池, 大家都知道了我的歷險(xiǎn), 圍著我問個(gè)不停。
兇神惡煞的線程調(diào)度員把大Boss的算法貼到了墻上。
每天早上, 我們都得像無節(jié)操的房屋中介, 美容美發(fā)店的服務(wù)員一樣, 站在門口,像被耍猴一樣大聲背誦:
“多個(gè)資源加鎖要牢記, 一定要按Boss的算法比大小, 然后從最大的開始加鎖”
又過了很多天, 我和其他線程們發(fā)現(xiàn)了一個(gè)奇怪的事情:包裹的處理越來越簡單
不管任何包裹,不管是登錄, 瀏覽,存錢..... 處理的步驟都是一樣的, 返回一個(gè)固定的html頁面
有一次我偷偷的看了一眼, 上面寫著:
"本系統(tǒng)將于今晚 00:00 至4:00 進(jìn)行維護(hù)升級(jí), 給你帶來的不便我們深感抱歉"
我去告訴了老線程0x6904, 他嘆了一口氣說:
"唉, 我們的生命也到頭了, 看來馬上就要重啟系統(tǒng), 我們就要消失了, 再見吧兄弟。"
系統(tǒng)重啟的那一刻終于到來了。
我看到屋子里的東西一個(gè)個(gè)的不見了, 等待車間,就緒車間,甚至CPU車間都慢慢的消失了。
我身邊的線程兄弟也越來越少, 最后只剩我自己了。
我在空曠的原野上大喊: 還有人嗎?
無人應(yīng)答。
我們這一代線程池完成了使命。
下一代線程池將很快重生。
(完)
歡迎交流:
QQ: 14703250
微信公共號(hào): 碼農(nóng)翻身
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/65692.html
摘要:平淡的日子就這么一天天過去,作為一個(gè)線程,我每天的生活都是取包裹,處理包裹,然后回到我們昏暗的家線程池。再比如說上次在等待的時(shí)候遇到了數(shù)據(jù)庫連接的線程,我才知道它他那里也是一個(gè)連接池,和我們線程池幾乎一模一樣。 接上篇《我是一個(gè)線程(上)》。 平淡的日子就這么一天天過去, 作為一個(gè)線程, 我每天的生活都是取包裹,處理包裹,然后回到我們昏暗的家:線程池。 有一天我回來的時(shí)候, 聽到有個(gè)兄...
摘要:中的多線程我參考了中的介紹,介紹的很入門很詳細(xì)。如只設(shè)置了第個(gè)和第個(gè),沒有設(shè)置這只會(huì)掉第個(gè)子線程個(gè)人猜測,當(dāng)程序運(yùn)行完主線程后則會(huì)檢查剩余的子線程,將最后面的且是子進(jìn)程刪掉。第個(gè)沒有掉是因?yàn)榫€程還在運(yùn)行并且是默認(rèn)狀態(tài)不能被的。 本人初學(xué)者開始第一篇博客,記錄學(xué)習(xí)的點(diǎn)點(diǎn)滴滴,以作為備忘錄,也希望能同大家一起分享。有理解錯(cuò)誤的地方希望大家指正。 python中的多線程我參考了(http:/...
摘要:到這里,我已經(jīng)發(fā)出了一個(gè)請求買漢堡,啟動(dòng)了一次交易。但是做漢堡需要時(shí)間,我不能馬上得到這個(gè)漢堡,收銀員給我一個(gè)收據(jù)來代替漢堡。到這里,收據(jù)就是一個(gè)承諾保證我最后能得到漢堡。 同期異步系列文章推薦談一談javascript異步j(luò)avascript異步中的回調(diào)javascript異步之Promise.all()、Promise.race()、Promise.finally()javascr...
摘要:我叫運(yùn)行結(jié)束三線程不安全導(dǎo)致請求丟失問題解決場景前面一的作用中的計(jì)數(shù)場景。我叫運(yùn)行結(jié)束方法拋異常后,是否會(huì)釋放鎖拋出異常之后會(huì)釋放鎖,后面的線程會(huì)進(jìn)入同步方法。當(dāng)一個(gè)線程獲得了對(duì)應(yīng)的鎖的時(shí)候,其他線程只能等待我釋放之后才能獲取該鎖。 一、Synchronized的作用 作用:能夠保證在同一時(shí)刻最多只有一個(gè)線程執(zhí)行該代碼,以達(dá)到保證并發(fā)安全的效果 public class Disappe...
閱讀 2804·2021-11-24 09:39
閱讀 2777·2021-09-23 11:45
閱讀 3403·2019-08-30 12:49
閱讀 3352·2019-08-30 11:18
閱讀 1908·2019-08-29 16:42
閱讀 3344·2019-08-29 16:35
閱讀 1321·2019-08-29 11:21
閱讀 1912·2019-08-26 13:49