आपको केवल एक विधि में इसकी आवश्यकता है। सिर्फ इसलिए, पहले @Async
-method के साथ एक नया धागा शुरू होने के बाद, invoking विधि के लिए असीमित है।
लेकिन क्या यह आपके लिए मतलब है, अत्यधिक क्या आपके उदाहरण उदाहरण देकर स्पष्ट करना चाहिए पर निर्भर करता है:
1) तो आपके मामले में, test1(String param1)
के लिए एक @Async
पर्याप्त है जब आप कभी भी test1
के माध्यम से test2
और test3
आह्वान।
@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 अधिक भार को दर्शाता हुआ के लिए है), तो यह है अधिक जटिल फिर आपको असली सामग्री करने वाली विधि पर @Async
एनोटेशन होना होगा। क्योंकि आप केवल एक एसिंक-मार्ग में असली निष्पादन निष्पादित करना चाहते हैं, लेकिन प्रत्येक चेनिंग चरण के लिए एक async आमंत्रण नहीं है।
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 load- या संकलन समय बुनाई) नहीं चलेंगे एक विधि async अगर इसे this
के माध्यम से बुलाया जाता है! (देखें https://stackoverflow.com/a/22561903/280244)
वास्तव में मेरे प्रश्न का उत्तर नहीं है, केवल यह कहता है कि 'Async' ब्लॉक असीमित रूप से चलाया जाएगा। –