1.CountDownLatch和CyclicBarrier實操---> CompletableFuture異步編程

1.場景

對賬系統(tǒng)流程圖

2.方案

1.直接按照邏輯

對賬系統(tǒng)單線程執(zhí)行示意圖
代碼實現(xiàn)

這樣雖然簡單,但是問題也很明顯,就是都是串行萨咕,效率比較低丑孩!

2.利用并行優(yōu)化對賬系統(tǒng)

對賬系統(tǒng)并行執(zhí)行示意圖
代碼實現(xiàn)

while循環(huán)里面每次都會創(chuàng)建新的線程冀宴,而創(chuàng)建線程可是個耗時的操作。所以最好是創(chuàng)建出來的線程能夠循環(huán)利用温学,估計這時你已經(jīng)想到線程池了略贮,是的,線程池就能解決這個問題仗岖!但是線程池的方案里逃延,線程根本就不會退出,所以join就失效了轧拄!

方案3 用CountDownLatch+線程池:執(zhí)行圖還是如上圖

代碼實現(xiàn)

方案4:CyclicBarrier實現(xiàn)線程同步進一步優(yōu)化性能

優(yōu)化思路:我們都知道前面?zhèn)z個方案都是先執(zhí)行查詢單和派送單揽祥,然后再進行對賬!也就是說檩电,執(zhí)行查詢單和派送單倆個操作是并行拄丰,但是和對賬操作是串行(對賬操作等到倆個操作都執(zhí)行完成,再統(tǒng)一dui賬)俐末,這個時候我們優(yōu)化的思路就是可不可以不等執(zhí)行查詢單和派送單都執(zhí)行完成再對賬料按,可以等查詢單和派送單分別查詢出有記錄的時候,就執(zhí)行對賬操作卓箫!

完全并行執(zhí)行示意圖

如何實現(xiàn)優(yōu)化:其實這有點類似于生產(chǎn)者消費者模型载矿,就是需要倆個隊列用來存放未對賬單和派送單每次查詢的記錄,然后消費者也就是對賬操作這個線程烹卒,負責從隊列里取記錄進行執(zhí)行對賬恢准!

過程:線程T1和線程T2只有都生產(chǎn)完1條數(shù)據(jù)的時候,才能一起向下執(zhí)行甫题,也就是說馁筐,線程T1和線程T2要互相等待,步調(diào)要一致坠非;同時當線程T1和T2都生產(chǎn)完一條數(shù)據(jù)的時候敏沉,還要能夠通知線程T3執(zhí)行對賬操作。

雙隊列示意圖
同步執(zhí)行示意圖

難點:一個是線程T1和T2要做到步調(diào)一致,另一個是要能夠通知到線程T3盟迟。

解決方案:用CyclicBarrier實現(xiàn)線程同步秋泳!(其實依然可以用一個計數(shù)器來解決這兩個難點,計數(shù)器初始化為2攒菠,線程T1和T2生產(chǎn)完一條數(shù)據(jù)都將計數(shù)器減1迫皱,如果計數(shù)器大于0則線程T1或者T2等待。如果計數(shù)器等于0辖众,則通知線程T3卓起,并喚醒等待的線程T1或者T2,與此同時凹炸,將計數(shù)器重置為2戏阅,這樣線程T1和線程T2生產(chǎn)下一條數(shù)據(jù)的時候就可以繼續(xù)使用這個計數(shù)器了,但是java給我們提供了更加強大的CyclicBarrier)

實現(xiàn):線程T1負責查詢訂單啤它,當查出一條時奕筐,調(diào)用?barrier.await()?來將計數(shù)器減1,同時等待計數(shù)器變成0变骡;線程T2負責查詢派送單离赫,當查出一條時,也調(diào)用?barrier.await()?來將計數(shù)器減1塌碌,同時等待計數(shù)器變成0笆怠;當T1和T2都調(diào)用?barrier.await()?的時候,計數(shù)器會減到0誊爹,此時T1和T2就可以執(zhí)行下一條語句了蹬刷,同時會調(diào)用barrier的回調(diào)函數(shù)來執(zhí)行對賬操作。非常值得一提的是频丘,CyclicBarrier的計數(shù)器有自動重置的功能办成,當減到0的時候,會自動重置你設置的初始值

對賬
查詢操作

注意點:1. 執(zhí)行回調(diào)的線程池Executor executor =Executors.newFixedThreadPool(1);大小必須是1搂漠!如果設置為多個迂卢,有可能會兩個線程 A 和 B 同時執(zhí)行對賬操作,造成對賬的數(shù)據(jù)不匹配(可能A線程取到倆個隊列中不是一一對應的數(shù)據(jù))桐汤;所以1個線程實現(xiàn)生產(chǎn)數(shù)據(jù)串行執(zhí)行而克,保證數(shù)據(jù)安全!

2.調(diào)用的check不可以直接調(diào)用--》必須要在線程池中怔毛,如果不用線程池员萍,那執(zhí)行check這個操作的回調(diào)線程就是CyclicBarrier把計數(shù)器減為0的線程,也就是查詢線程在執(zhí)行check操作拣度,就會導致一個查詢線程在等待碎绎,一個查詢線程在執(zhí)行check操作螃壤,導致效率降低

方案5:CompletableFuture優(yōu)化方案三的寫法---》方案三的寫法也可以改為Future寫法

CompletableFuture優(yōu)化

總結(jié)

1.出現(xiàn)問題1:oom,如果隊列生產(chǎn)太快筋帖,消費者(對賬)來不及消費奸晴,就會出現(xiàn)oom

2.出現(xiàn)問題2:? 生產(chǎn)環(huán)境下真的可以保證訂單數(shù)據(jù)一一對應?

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末日麸,一起剝皮案震驚了整個濱河市寄啼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌代箭,老刑警劉巖墩划,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異梢卸,居然都是意外死亡走诞,警方通過查閱死者的電腦和手機副女,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門蛤高,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碑幅,你說我怎么就攤上這事戴陡。” “怎么了沟涨?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵恤批,是天一觀的道長。 經(jīng)常有香客問我裹赴,道長喜庞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任棋返,我火速辦了婚禮延都,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睛竣。我一直安慰自己晰房,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布射沟。 她就那樣靜靜地躺著殊者,像睡著了一般。 火紅的嫁衣襯著肌膚如雪验夯。 梳的紋絲不亂的頭發(fā)上猖吴,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音挥转,去河邊找鬼距误。 笑死簸搞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的准潭。 我是一名探鬼主播趁俊,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刑然!你這毒婦竟也來了寺擂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泼掠,失蹤者是張志新(化名)和其女友劉穎怔软,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體择镇,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡挡逼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腻豌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泛烙。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡假哎,死狀恐怖滥朱,靈堂內(nèi)的尸體忽然破棺而出妆兑,到底是詐尸還是另有隱情,我是刑警寧澤苏携,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布做瞪,位于F島的核電站,受9級特大地震影響右冻,放射性物質(zhì)發(fā)生泄漏装蓬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一纱扭、第九天 我趴在偏房一處隱蔽的房頂上張望牍帚。 院中可真熱鬧,春花似錦跪但、人聲如沸履羞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忆首。三九已至,卻和暖如春被环,著一層夾襖步出監(jiān)牢的瞬間糙及,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工筛欢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浸锨,地道東北人唇聘。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像柱搜,于是被迫代替她去往敵國和親迟郎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容