Spring中的異步方法@Async失效的原因詳解
Spring中的異步方法@Async失效的原因
1.沒有在配置類中開啟@EnableAsync注解,導致異步方法失效。
@Configuration
@EnableAsync // 開啟異步支持
public class AppConfig {
// ...
}
2.異步方法必須要被其它類中的方法調(diào)用,如果在同一個類中調(diào)用,異步方法仍然是同步執(zhí)行的。
@Service
public class DemoService {
@Async
public void asyncMethod() {
// ...
}
public void callAsyncMethod() {
asyncMethod(); // 異步方法不會被異步執(zhí)行
}
}
@Service
public class CallerService {
@Autowired
private DemoService demoService;
public void callAsyncMethod() {
demoService.asyncMethod(); // 異步方法會被異步執(zhí)行
}
}
3.異步方法必須要在public方法中被調(diào)用,如果被同類中的private方法調(diào)用,異步方法仍然是同步執(zhí)行的。
@Service
public class DemoService {
@Async
public void asyncMethod() {
// ...
}
public void callAsyncMethod() {
privateMethod(); // 異步方法不會被異步執(zhí)行
}
private void privateMethod() {
asyncMethod(); // 異步方法不會被異步執(zhí)行
}
}
4.異步方法必須是非靜態(tài)方法,如果是靜態(tài)方法,異步方法仍然是同步執(zhí)行的。
@Service
public class DemoService {
@Async
public static void asyncMethod() {
// ...
}
public void callAsyncMethod() {
asyncMethod(); // 異步方法不會被異步執(zhí)行
}
}
5.異步方法必須要有返回值,如果沒有返回值,異步方法仍然是同步執(zhí)行的。
@Service
public class DemoService {
@Async
public void asyncMethod() {
// ...
}
@Async
public Future<String> asyncMethodWithResult() {
// ...
return new AsyncResult<>("result");
}
}
@Service
public class CallerService {
@Autowired
private DemoService demoService;
public void callAsyncMethod() {
demoService.asyncMethod(); // 異步方法不會被異步執(zhí)行
Future<String> future = demoService.asyncMethodWithResult(); // 異步方法會被異步執(zhí)行
}
}
到此這篇關(guān)于Spring中的異步方法@Async失效的原因詳解的文章就介紹到這了,更多相關(guān)Spring的@Async失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springcloud gateway如何實現(xiàn)路由和負載均衡
這篇文章主要介紹了springcloud gateway如何實現(xiàn)路由和負載均衡的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java Swing JToggleButton開關(guān)按鈕的實現(xiàn)
這篇文章主要介紹了Java Swing JToggleButton開關(guān)按鈕的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12
淺析Java?NIO?直接緩沖區(qū)和非直接緩沖區(qū)
本篇文章主要為大家介紹了Java?NIO?中直接緩沖區(qū)和非直接緩沖區(qū)的定義以及使用流程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11
一文解決System.in關(guān)閉后無法再繼續(xù)使用流的問題
這篇文章主要給大家介紹如何解決System.in關(guān)閉后無法再繼續(xù)使用流的問題,文中有詳細的解決方法和代碼示例,具有一定的參考價值,需要的朋友可以參考下2023-07-07
詳解備忘錄模式及其在Java設計模式編程中的實現(xiàn)
這篇文章主要介紹了詳解備忘錄模式及其在Java設計模式編程中的實現(xiàn),備忘錄模式數(shù)據(jù)的存儲過程中應當注意淺拷貝和深拷貝的問題,需要的朋友可以參考下2016-04-04

