泡一杯茶,學一學同非同步

LieBrother發表於2019-06-27

泡一杯茶,學一學同非同步

Java 多執行緒系列文章第 2 篇

接下來幾篇會給大家屢清楚多執行緒中涉及到的一些概念,理解了這些概念,往後的文章才好明白。

今天給大家講講同步非同步這兄弟倆。

同步 & 非同步

通過我們們現實中的一個場景來描述這 2 個乾巴巴的詞。大家身邊不知道有木有朋友是潮汕的?潮汕地區每家每戶都有功夫茶,只要來客人,一定會用功夫茶來招待。功夫茶關鍵在於功夫兩字,功夫指的是泡茶方式比較講究,它不像我們上班時用保溫瓶泡茶,而是有一道泡茶的流程和工具。下面在網上找到的功夫茶口訣(作為潮汕人這麼久,都不知道有這口訣,是聽我女朋友說有這個口訣才知道。。。)

潮汕功夫茶沖泡口訣:

  1. 白鶴沐浴(洗杯):用開水洗淨茶杯並提高茶具溫度。
  2. 觀音入宮(落茶):把鐵觀音茶放入茶具,放茶量約佔茶具容量的五分。
  3. 懸壺高衝(沖茶):把滾開的水提高衝入茶壺或蓋甌,使茶葉轉動。
  4. 春風拂面(刮泡沫):用壺蓋或甌蓋輕輕颳去漂浮的白泡沫,使其清新潔淨。
  5. 關公巡城(倒茶):把泡一、二分鐘後的茶水依次巡迴注入並列的茶杯裡。
  6. 韓信點兵(點茶):茶水倒到少許時要一點一點均勻地滴到各杯中,使其濃淡均勻。
  7. 鑑嘗湯色(看茶):觀賞杯中茶水的顏色,聞茶之香氣。
  8. 品啜甘霖(喝茶):乘熱細綴,先嗅其香,後嘗其味,邊啜邊嗅,淺斟細飲。飲量雖不多,但能齒頰留香,喉底回甘,心曠神怡,別有情趣。

有客人來的時候,我們會先煮水,沒等到水煮沸就先洗茶杯,落茶,等到水煮沸了,再衝茶,倒茶。這個過程中,有些步驟是同步的,比如洗茶杯和落茶,肯定要把茶杯先洗乾淨後再落茶,一個人沒法同時幹這 2 件事,我們關注點放在煮水這個過程,是先煮水,煮水需要比較長的時間,煮水的過程中把茶杯洗了,還有落茶,這個過程其實就是非同步,非同步指沒有乾等待水煮沸,在煮水的過程做其他事情(洗茶杯、落茶),這就像是傳送了一個訊息,通知說要煮水,然後就繼續自己該幹嘛幹嘛,非同步的過程完全不影響當前做的其他事。下圖反映了煮水步驟是非同步的這個過程。

泡一杯茶,學一學同非同步

如果主人用下面方式來泡茶,不是新手就是不歡迎你(開玩笑,有可能是主人一見如故,想趁著煮水和你嘮家常)。上面講了非同步泡茶的方式,下面講同步泡茶是啥回事。看下圖,把煮水這個過程放在了時間線下方,也就是在煮水的時候乾等著水煮沸,不做其他的事情,這就是同步,很明顯,最後整個泡茶的過程耗時比非同步的長。

泡一杯茶,學一學同非同步

總結

這裡在簡單總結一下(如有錯誤請大家幫忙糾正):

同步(Synchronous):特指在同一個執行緒裡面執行的內容之間的關係是有順序的;執行緒之間需要同步時,就需要使用一些顯式的同步方式,這也是多執行緒帶來的大問題,在多執行緒程式設計需要特別關注。

非同步(Asynchronous):特指一些執行內容可以不用直接等待執行結果,非同步執行的內容一般是在另一個執行緒執行,只需要執行完結果反饋回來就行。

推薦閱讀

程式知多少?

設計模式看了又忘,忘了又看?

公眾號後臺回覆『設計模式』可以獲取《一故事一設計模式》電子書

覺得文章有用幫忙轉發&點贊,多謝朋友們!

LieBrother

相關文章