Java 多線程系列文章第 4 篇。前端
繼續我們的 Java 多線程系列文章,今天再講講概念,這篇應該是最後一篇基礎概念,接下來就直接進入 Java 多線程主題了,在後面的文章裏若是有概念須要單獨拿出來說時再補充概念篇。後端
這篇文章主要講講阻塞(Blocking)和非阻塞(Non-blocking)。設計模式
之前在學校作項目,基本上都是獨立開發,每一個人開發一個部分,以最小化溝通成本的方式劃分工做量。到了職場,單純的以最小化對接成原本安排工做是幾乎不可能的,要考慮的因素變多了,各類跨小組、跨部門、甚至跨職場的工做,這就帶來了溝通成本以及工做對接的各類阻塞問題。多線程
新人剛入職場的時候,對一切都不熟悉,在作一些小組之外的對接工做時,就會遇到種種問題,特別如今充斥着各類分佈式架構,之前開發 Web 後臺的同窗要會開發 JSP 頁面,而如今先後端都分離了。設想一下這個場景。架構
小明是學習前端出身,剛開始步入職場,作的第一個需求就是登陸和註冊界面,須要對接一個寫後臺的同事小東,小東負責開發登陸和註冊的後臺邏輯。小明開發了登陸界面,準備和小東對接聯調登陸功能,這時小東回覆說他恰好有生產 bug 在跟進,還沒開發好,這時小明該怎麼作?併發
有 2 種作法:異步
乾等着小東開發好登陸後臺,再和他聯調。分佈式
開發註冊界面,開發過程當中再時刻詢問小東登陸後臺接口是否作完了,若是小東作完了,再去對接。學習
這 2 種作法的關鍵區別是什麼呢?對於小東來講,沒啥區別,他能作的就是儘可能早點實現他的功能點。主要關注小明,第一種作法,小明作好了登陸界面,接着則等待小東的登陸後臺接口,若是小東要開發一下午,那麼小明就一下午啥事也不幹,這種狀況就是阻塞,小明的其餘任務由於登陸界面沒對接聯調,而一直阻塞着;第二種作法,小明得知小東登陸後臺接口還沒實現,就着手先作註冊界面的功能,而後每過一個小時跟小東確認一下登陸後臺接口開發是否開發完成,直到小東開發完登陸後臺接口,便開始對接聯調,這種狀況就是非阻塞,登陸界面沒對接聯調徹底不影響小明的開發進度,能聯調的時候就聯調,沒法聯調就完成手頭上的其餘任務。線程
可能有些同窗初入職場會犯這類錯誤,作的功能依賴別人,由於別人還沒作完,而後就採用第一種作法,一直乾等着,直到對方完成後再繼續工做。偶爾偷偷懶還行,若是一直是這樣的工做狀態,對初入職場的同窗沒有好處,並且這個被老闆知道很很差。若是某一個需求點阻塞了,應該就先作手頭上其餘工做,若是手頭上沒其餘工做,就跟老闆反饋狀況後領其餘任務作,還要時刻去跟進阻塞的需求點的進度。
下面用流程圖來描述這 2 個概念:
看了上面的圖,是否是更加理解阻塞與非阻塞了呢?
若是你是老闆,或者說是小明的領導,你會讓小明怎麼作?第一種作法仍是第二種作法呢?有支持第一種作法的,麻煩聯繫我,大家公司還招人麼?
推薦閱讀
後臺回覆『設計模式』能夠獲取《一故事一設計模式》電子書
以爲文章有用幫忙轉發&點贊,多謝朋友們!