旅游開(kāi)發(fā) 網(wǎng)站建設(shè)山西網(wǎng)站seo
一、需求背景
相信大家入職到一個(gè)新公司(xinkeng),一般都會(huì)被分配去解決千古難題(caipigu),這些問(wèn)題大概率很多不想去解決,并且代碼很多復(fù)雜,各種套娃。領(lǐng)導(dǎo)為檢驗(yàn)新人的能力,就會(huì)去讓新人去解決這種問(wèn)題,一方面可以了解業(yè)務(wù)代碼,還能順手把沒(méi)人愿意做的事做了。但是,你做不好也沒(méi)關(guān)系,大佬也會(huì)說(shuō),這個(gè)其實(shí)都是歷史問(wèn)題了,大家是不是有遇到這樣奇葩新手工作呢?歡迎大家評(píng)論區(qū)討論。今天給大家分享一個(gè)比較常見(jiàn)的問(wèn)題,接口超時(shí)或者響應(yīng)時(shí)間比較長(zhǎng)怎么解決。
本文主要介紹,如何同個(gè)CompletableFuture異步編排,來(lái)解決分布多次查詢(xún),導(dǎo)致接口響應(yīng)慢的問(wèn)題。
二、CompletableFuture介紹與實(shí)戰(zhàn)
1.為什么要用CompletableFuture呢?
大家都知道,多線(xiàn)程可以解決,多次查詢(xún)第三方接口或者數(shù)據(jù)庫(kù)耗時(shí)的問(wèn)題?但是有種情況,可能就很難去解決了,比如一個(gè)異步調(diào)用可能會(huì)依賴(lài)另一個(gè)異步調(diào)用的執(zhí)行結(jié)果。因?yàn)槎嗑€(xiàn)程一整個(gè)是一個(gè)任務(wù),多線(xiàn)程可能就不好處理。所以Java8就推出了一個(gè)新的并發(fā)框架—CompletableFuture??梢詤⒖紩?shū)籍:《實(shí)戰(zhàn)java高并發(fā)程序設(shè)計(jì)》 、《Java8實(shí)戰(zhàn)》
2.CompletableFuture常用接口方法
1)CompletableFuture啟動(dòng)異步任務(wù)
CompletableFuture提供四種靜態(tài)方法來(lái)創(chuàng)建一個(gè)異步操作,可以自定義線(xiàn)程池,否沒(méi)有傳Executor則會(huì)使用默認(rèn)線(xiàn)程池。
無(wú)返回值的:
public static Comple