SpringBoot 非同步呼叫方法並接收返回值

2022-08-14 04:06:16 字數 1943 閱讀 7377

一、背景  

專案中肯定會遇到非同步呼叫其他方法的場景,比如有個計算過程,需要計算很多個指標的值,但是每個指標計算的效率快慢不同,如果採用同步執行的方式,執行這乙個過程的時間是計算所有指標的時間之和。比如:

方法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、**中使用

public

void

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。最終執行...