10

मेरा प्रश्न बहुत ही इस एक के समान है: @Async prevent a thread to continue until other thread have finishedधागे की स्प्रिंग @Async संख्या सीमित

मूल रूप से मैं चलाने की जरूरत है ~ अधिक धागे में संगणना के सैकड़ों। मैं केवल कुछ समानांतर धागे चलाने के लिए चाहता हूँ उदा। Paralell में 5 computationis के साथ 5 धागे।

मैं वसंत ढांचे का उपयोग कर रहा हूं और @Async विकल्प प्राकृतिक विकल्प है। मुझे पूर्ण-विशेषीकृत जेएमएस कतार की आवश्यकता नहीं है, यह मेरे लिए थोड़ा ऊपर है।

कोई विचार? धन्यवाद

उत्तर

12

क्या आपने Task Executor चेक आउट किया है? आप अपने कार्यों को निष्पादित करने के लिए अधिकतम थ्रेड के साथ थ्रेड पूल को परिभाषित कर सकते हैं।

आप @Async के साथ उपयोग करने के लिए, अपने वसंत-config में इस का उपयोग करना चाहते हैं:

<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/> 

<task:executor id="myExecutor" pool-size="5"/> 

<task:scheduler id="myScheduler" pool-size="10"/> 

पूर्ण संदर्भ here (25.5.3)। उम्मीद है की यह मदद करेगा।

16

आप वसंत के जावा-विन्यास का उपयोग कर रहे हैं, तो आपके config वर्ग AsyncConfigurer लागू करता है की जरूरत है:

@Configuration 
@EnableAsync 
public class AppConfig implements AsyncConfigurer { 

    [...] 

    @Override 
    public Executor getAsyncExecutor() { 
     ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 
     executor.setCorePoolSize(2); 
     executor.setMaxPoolSize(5); 
     executor.setQueueCapacity(50); 
     executor.setThreadNamePrefix("MyExecutor-"); 
     executor.initialize(); 
     return executor; 
    } 
} 

अधिक जानकारी के लिए @EnableAsync दस्तावेज़ देखें: http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html

+0

क्या हुआ अगर मैं कई asyncs की ज़रूरत है? – Dejell

+0

आप '@ Async' के साथ कई विधियों को एनोटेट कर सकते हैं और वे थ्रेड पूल/एक्जिक्यूटर को' @ EnableAsync' कॉन्फ़िगरेशन 'के साथ परिभाषित करेंगे। – Siggen

+0

मेरा मतलब है - प्रत्येक – Dejell

संबंधित मुद्दे