你確實只需要一種方法。僅僅因爲在第一個@Async
方法啓動一個新線程之後,它與調用方法是異步的。
但是這對你意味着,高度取決於你的例子應該說明一下:
1)所以你的情況,爲test1(String param1)
的@Async
足夠當你曾經調用test2
和test3
通過test1
。
@Async
public void test1(String param1) {
test2(param1, null);
}
private void test2(String param1, String param2) {
test3(param1, param2, null);
}
private void test3(String param1, String param2, String param3) {
// do something
}
說明該方法2和3是私人
2)但是,如果你的例子是用於說明重載爲默認參數圖案(Method chaining的方法),則它是更復雜。那麼你需要在做真正的東西的方法上有註解。因爲您只是想以異步方式執行實際執行,而不是每個鏈接步驟執行一次異步調用。
public void test(String param1) {
test(param1, null);
}
public void test(String param1, String param2) {
//this invocation runs async only when real AspectJ is used
test(param1, param2, null);
}
@Async
public void test(String param1, String param2, String param3) {
// do something
}
注意,所有方法都只是命名test
(方法鏈模式)
這裏的問題是,春季(沒有真正的AspectJ負載或編譯時編織)將不會運行如果通過this
調用一個異步方法!(見https://stackoverflow.com/a/22561903/280244)
對於我的問題沒有真正的答案,只是說'@ Async'塊會異步運行。 –