यहां मेरा उपयोग केस है।स्प्रिंग @ शेड्यूल्ड और @ एसिंक का उपयोग करके
एक विरासत प्रणाली डेटाबेस कतार तालिका QUEUE अद्यतन करती है।
मैं चाहता हूँ एक अनुसूचित आवर्ती काम है कि - जाँच करता कतार की सामग्री - यदि तालिका में पंक्तियों हैं यह पंक्ति ताले और कुछ काम है - कतार में पंक्ति
पिछले काम तो हटा देता है अभी भी चल रहा है, फिर काम करने के लिए एक नया धागा बनाया जाएगा। मैं समवर्ती धागे की अधिकतम संख्या को कॉन्फ़िगर करना चाहता हूं।
मैं वसंत 3 उपयोग कर रहा हूँ और मेरे वर्तमान समाधान निम्नलिखित (1 millisecond के fixedRate का उपयोग कर धागे मूल रूप से लगातार चलाने के लिए प्राप्त करने के लिए)
@Scheduled(fixedRate = 1)
@Async
public void doSchedule() throws InterruptedException {
log.debug("Start schedule");
publishWorker.start();
log.debug("End schedule");
}
<task:executor id="workerExecutor" pool-size="4" />
यह 4 धागे सीधे बंद बनाई करना है और धागे कतार से वर्कलोड सही ढंग से साझा किया। हालांकि मुझे लगता है कि धागे को पूरा करने में काफी समय लगता है, तो मुझे स्मृति रिसाव मिल रही है।
java.util.concurrent.ThreadPoolExecutor @ 0xe097b8f0 | 80 | 373,410,496 | 89.74%
|- java.util.concurrent.LinkedBlockingQueue @ 0xe097b940 | 48 | 373,410,136 | 89.74%
| |- java.util.concurrent.LinkedBlockingQueue$Node @ 0xe25c9d68
तो
1: मैं @Async और एक साथ @Scheduled का उपयोग कर किया जाना चाहिए?
2: यदि नहीं, तो मैं अपनी आवश्यकताओं को प्राप्त करने के लिए वसंत का उपयोग कैसे कर सकता हूं?
3: जब मैं अन्य धागे व्यस्त होते हैं तो मैं केवल नए थ्रेड कैसे बना सकता हूं?
धन्यवाद सब!
संपादित करें: मुझे लगता है नौकरियों की कतार असीम लंबा हो रही थी ... अब
<task:executor id="workerExecutor"
pool-size="1-4"
queue-capacity="10" rejection-policy="DISCARD" />
का उपयोग कर परिणाम के साथ वापस रिपोर्ट करेंगे
यह '@ Async' बिना ठीक से काम नहीं करता है? 'अनुसूचित 'के साथ एनोटेटेड विधि को वैसे भी अतुल्यकालिक रूप से निष्पादित किया जाना चाहिए। – ach
यदि आप चाहते हैं कि "धागे लगातार चलें" तो आपको वास्तव में पहले स्थान पर @ शेड्यूल का उपयोग नहीं करना चाहिए। इसका उपयोग "अनुसूचित" गतिविधियों के लिए होगा, निरंतर नहीं ... – JoeG
आप publWorker.start() को बनाने पर विचार कर सकते हैं; विधि Async। –