में ThreadPoolExecutor के साथ अस्वीकृत एक्सेक्यूशन अपवाद को कैसे संभालें जावा में ThreadPoolExecutor
का उपयोग करते समय RejectedExecutionException
को संभालने का सबसे अच्छा तरीका क्या है?जावा
मैं यह सुनिश्चित करना चाहता हूं कि सबमिट किए गए कार्य को अनदेखा नहीं किया जाना चाहिए और निश्चित रूप से निष्पादित किया जाना चाहिए। अभी तक कार्य पूरा करने के लिए कोई कठिन वास्तविक समय आवश्यकता नहीं है।
उन चीजों में से एक जो मैंने सोचा था, एक लूप में इंतजार कर रहा था जब तक कि मुझे पता न हो कि चलने योग्य कतार में जगह है, और फिर इसे कतार में जोड़ें।
खुश होंगे अगर लोग अपने अनुभव साझा कर सकें।
while(executor.getQueue().remainingCapacity <= 0){
// keep looping
Thread.sleep(100);
};
//if the loop exits ,indicates that we have space in the queue hence
//go ahead and add to the queue
executor.execute(new ThreadInstance(params));
यदि एक से अधिक धागे ऐसा करने की कोशिश कर रहे हैं तो यह दौड़ की स्थिति पैदा करेगा। यह एक सीपीयू भी जला देगा जिसका अर्थ यह हो सकता है कि निष्पादक के लिए कतार को साफ़ करना अधिक समय लगता है। जैसे अगर योजक और निष्पादक के लिए केवल एक सीपीयू है, तो यह विनाशकारी हो सकता है। –
आर्किटेक्चर से ऐसा करने वाला सिर्फ एक धागा होगा, और सीपीयू टाइम खाने को संभालने के लिए, मैं थ्रेड नींद कर रहा हूं। यह अब कैसा दिखता है? – Neeraj
सोना, यहां तक कि थोड़े समय के लिए (यहां तक कि 1 - 10 एमएस) भी इससे बेहतर नहीं है। 100 एमएस भी एक अच्छा मूल्य है। यह ठीक है अगर आपके पास केवल एक प्रकाशन धागा है। –