一、背景
專案中肯定會遇到非同步呼叫其他方法的場景,比如有個計算過程,需要計算很多個指標的值,但是每個指標計算的效率快慢不同,如果採用同步執行的方式,執行這乙個過程的時間是計算所有指標的時間之和。比如:
方法a:計算指標x,指標y,指標z的值,其中計算指標x需要1s,計算指標y需要2s,指標z需要3s。最終執行完方法a就是5s。
現在用非同步的方式優化一下
方法a非同步呼叫方法b,方法c,方法d,方法b,方法c,方法d分別計算指標x,指標y,指標z的值,那麼最終執行完方法a的時間則是3s。
還有一種用途是當乙個業務裡面需要多個請求時,這時候非同步併發請求所得到的回報遠遠是物有所值的。因為他是非同步執行的,話不多說,一下是在springboot裡面使用併發請求;
二、spring boot中非同步併發使用
#****************整合async執行緒池開始*******************async: # async執行緒池 配置executor:
awaitterminationseconds: 60#*****************整合async執行緒池結束******************
2.2、配置執行緒池
@configuration@enableasync
public
class
executorconfig ")
private
integer corepoolsize;
@value("$")
private
integer maxpoolsize;
@value("$")
private
integer queuecapacity;
@value("$")
private
integer keepaliveseconds;
@value("$")
private
string threadnameprefix;
@value("$")
private
integer awaitterminationseconds;
/*** 執行緒池**
@return
*/@bean(name = "asyncexecutor")
public
executor asyncexecutor()
}
2.3、執行緒池監控(這個可有可無,主要是為了對執行緒池引數及時的調優)
@restcontroller@slf4j
public
class asyncexecutorcontroller extends
basecontroller
try
catch
(exception e)
return
resultbean;
}}
2.4、**中使用
publicvoid
getmap()
catch
(interruptedexception e)
catch
(executionexception e)
}public futurefunctiona ()
catch
(interruptedexception e)
return
future;
}public futurefunctionb ()
catch
(interruptedexception e)
return
future;
}public
void
aaa()
三、使用誤區
在使用時候,
四、執行緒池選型
Springboot之非同步呼叫(Async)
非同步呼叫通常是指非同步呼叫service。1.啟動類開啟非同步呼叫 enableasync 2.controller層 無特殊處理 public string asyn 3.service層中需要非同步呼叫的方法加 async註解 async public void asyn system.out...
同步呼叫與非同步呼叫
一 什麼是同步呼叫與非同步呼叫 定義 1 同步就是整個處理過程順序執行,當各個過程都執行完畢,並返回結果。2 非同步呼叫則是只是傳送了呼叫的指令,呼叫者無需等待被呼叫的方法完全執行完畢 而是繼續執行下面的流程。例如,在某個呼叫中,需要順序呼叫 a,b,c三個過程方法 如他們都是同步呼叫,則需要將他們...
SpringBoot 非同步呼叫方法並接收返回值
專案中肯定會遇到非同步呼叫其他方法的場景,比如有個計算過程,需要計算很多個指標的值,但是每個指標計算的效率快慢不同,如果採用同步執行的方式,執行這乙個過程的時間是計算所有指標的時間之和。比如 方法a 計算指標x,指標y,指標z的值,其中計算指標x需要1s,計算指標y需要2s,指標z需要3s。最終執行...