1. 程式人生 > 程式設計 >java同步與非同步的學習筆記整理

java同步與非同步的學習筆記整理

概念:

1、同步:所有的操作都做完,才返回給使用者。這樣使用者線上等待的時間太長,給使用者一種卡死了的感覺(就是系統遷移中,點選了遷移,介面就不動了,但是程式還在執行,卡死了的感覺)。這種情況下,使用者不能關閉介面,如果關閉了,即遷移程式就中斷了。

2、非同步:將使用者請求放入訊息佇列,並反饋給使用者,系統遷移程式已經啟動,你可以關閉瀏覽器了。然後程式再慢慢地去寫入資料庫去。這就是非同步。但是使用者沒有卡死的感覺,會告訴你,你的請求系統已經響應了。你可以關閉介面了。

同步,是所有的操作都做完,才返回給使用者結果;即寫完資料庫之後,在相應使用者,使用者體驗不好。

非同步,不用等所有操作等做完,就相應使用者請求;即先相應使用者請求,然後慢慢去寫資料庫,使用者體驗較好。

同步非同步操作例子:

1、同步:

比如銀行的轉賬系統,對資料庫的儲存操作等等都是使用同步互動操作。

2、非同步:

為了避免短時間大量的資料庫操作,就使用快取機制,也就是訊息佇列。先將資料放入訊息佇列,然後再慢慢寫入資料庫。

引入訊息佇列機制,雖然可以保證使用者請求的快速響應,但是並沒有使得我資料遷移的時間變短(即80萬條資料寫入mysql需要1個小時,用了redis之後,還是需要1個小時,只是保證使用者的請求的快速響應。使用者輸入完http url請求之後,就可以把瀏覽器關閉了,幹別的去了。如果不用redis,瀏覽器不能關閉)。

知識點擴充:

程序同步及非同步的概念

1.程序同步:

就是在發出一個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事.就像早上起床後,先洗涮,然後才能吃飯,不能在洗涮沒有完成時,就開始吃飯.按照這個定義,其實絕大多數函式都是同步呼叫(例如sin,isdigit等)。但是一般而言,我們在說同步、非同步的時候,特指那些需要其他部件協作或者需要一定時間完成的任務。最常見的例子就是

sendmessage。該函式傳送一個訊息給某個視窗,在對方處理完訊息之前,這個函式不返回。當對方處理完畢以後,該函式才把訊息處理函式所返回的lresult值返回給呼叫者。

2.非同步

非同步的概念和同步相對。當一個非同步過程呼叫發出後,呼叫者不能立刻得到結果。實際處理這個呼叫的部件在完成後,通過狀態、通知和回撥來通知呼叫者。

以casycsocket類為例(注意,csocket從casyncsocket派生,但是其功能已經由非同步轉化為同步),當一個客戶端通過呼叫connect函式發出一個連線請求後,呼叫者執行緒立刻可以朝下執行。當連線真正建立起來以後,socket底層會發送一個訊息通知該物件。

以上就是java同步與非同步的區別是什麼的相關內容,感謝大家的學習和對我們的支援。