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