java同步與異步的學(xué)習(xí)筆記整理
概念:
1、同步:所有的操作都做完,才返回給用戶。這樣用戶在線等待的時間太長,給用戶一種卡死了的感覺(就是系統(tǒng)遷移中,點(diǎn)擊了遷移,界面就不動了,但是程序還在執(zhí)行,卡死了的感覺)。這種情況下,用戶不能關(guān)閉界面,如果關(guān)閉了,即遷移程序就中斷了。
2、異步:將用戶請求放入消息隊列,并反饋給用戶,系統(tǒng)遷移程序已經(jīng)啟動,你可以關(guān)閉瀏覽器了。然后程序再慢慢地去寫入數(shù)據(jù)庫去。這就是異步。但是用戶沒有卡死的感覺,會告訴你,你的請求系統(tǒng)已經(jīng)響應(yīng)了。你可以關(guān)閉界面了。
同步,是所有的操作都做完,才返回給用戶結(jié)果;即寫完數(shù)據(jù)庫之后,在相應(yīng)用戶,用戶體驗不好。
異步,不用等所有操作等做完,就相應(yīng)用戶請求;即先相應(yīng)用戶請求,然后慢慢去寫數(shù)據(jù)庫,用戶體驗較好。
同步異步操作例子:
1、同步:
比如銀行的轉(zhuǎn)賬系統(tǒng),對數(shù)據(jù)庫的保存操作等等都是使用同步交互操作。
2、異步:
為了避免短時間大量的數(shù)據(jù)庫操作,就使用緩存機(jī)制,也就是消息隊列。先將數(shù)據(jù)放入消息隊列,然后再慢慢寫入數(shù)據(jù)庫。
引入消息隊列機(jī)制,雖然可以保證用戶請求的快速響應(yīng),但是并沒有使得我數(shù)據(jù)遷移的時間變短(即80萬條數(shù)據(jù)寫入mysql需要1個小時,用了redis之后,還是需要1個小時,只是保證用戶的請求的快速響應(yīng)。用戶輸入完http url請求之后,就可以把瀏覽器關(guān)閉了,干別的去了。如果不用redis,瀏覽器不能關(guān)閉)。
知識點(diǎn)擴(kuò)充:
進(jìn)程同步及異步的概念
1.進(jìn)程同步:
就是在發(fā)出一個功能調(diào)用時,在沒有得到結(jié)果之前,該調(diào)用就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事.就像早上起床后,先洗涮,然后才能吃飯,不能在洗涮沒有完成時,就開始吃飯.按照這個定義,其實(shí)絕大多數(shù)函數(shù)都是同步調(diào)用(例如sin,isdigit等)。但是一般而言,我們在說同步、異步的時候,特指那些需要其他部件協(xié)作或者需要一定時間完成的任務(wù)。最常見的例子就是
sendmessage。該函數(shù)發(fā)送一個消息給某個窗口,在對方處理完消息之前,這個函數(shù)不返回。當(dāng)對方處理完畢以后,該函數(shù)才把消息處理函數(shù)所返回的lresult值返回給調(diào)用者。
2.異步
異步的概念和同步相對。當(dāng)一個異步過程調(diào)用發(fā)出后,調(diào)用者不能立刻得到結(jié)果。實(shí)際處理這個調(diào)用的部件在完成后,通過狀態(tài)、通知和回調(diào)來通知調(diào)用者。
以casycsocket類為例(注意,csocket從casyncsocket派生,但是其功能已經(jīng)由異步轉(zhuǎn)化為同步),當(dāng)一個客戶端通過調(diào)用connect函數(shù)發(fā)出一個連接請求后,調(diào)用者線程立刻可以朝下運(yùn)行。當(dāng)連接真正建立起來以后,socket底層會發(fā)送一個消息通知該對象。
以上就是java同步與異步的區(qū)別是什么的相關(guān)內(nèi)容,感謝大家的學(xué)習(xí)和對腳本之家的支持。
相關(guān)文章
java實(shí)現(xiàn)字符串和日期類型相互轉(zhuǎn)換的方法
這篇文章主要介紹了java實(shí)現(xiàn)字符串和日期類型相互轉(zhuǎn)換的方法,涉及java針對日期與字符串的轉(zhuǎn)換與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
RocketMQ整合SpringBoot實(shí)現(xiàn)生產(chǎn)級二次封裝
本文主要介紹了RocketMQ整合SpringBoot實(shí)現(xiàn)生產(chǎn)級二次封裝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
SpringBoot集成POI導(dǎo)出Execl表格之統(tǒng)一工具類
這篇文章主要為大家詳細(xì)介紹了SpringBoot集成POI導(dǎo)出Execl表格之統(tǒng)一工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-09-09
解決springboot自定義注解AOP在controller上導(dǎo)致controller注入失敗問題
這篇文章主要介紹了解決springboot自定義注解AOP在controller上導(dǎo)致controller注入失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
Java中的String、StringBuilder、StringBuffer三者的區(qū)別詳解
這篇文章主要介紹了Java中的String、StringBuilder、StringBuffer三者的區(qū)別詳解,就是String,StringBuilder以及StringBuffer這三個類之間有什么區(qū)別呢,自己從網(wǎng)上搜索了一些資料,有所了解了之后在這里整理一下,便于大家觀看,需要的朋友可以參考下2023-12-12

