कहें कि मेरे पास निम्न कोड है:निष्पादकों से RuntimeExceptions को सही ढंग से कैसे पकड़ें?
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(myRunnable);
अब, यदि myRunnable
RuntimeExcpetion
फेंकता है, तो मैं इसे कैसे पकड़ सकता हूं? एक तरीका newSingleThreadExecutor()
में अपना खुद का ThreadFactory
कार्यान्वयन प्रदान करना होगा और Thread
s के लिए कस्टम uncaughtExceptionHandler
s सेट करना होगा जो इससे निकलता है। एक और तरीका myRunnable
को स्थानीय (अज्ञात) Runnable
में लपेटना होगा जिसमें एक कोशिश-पकड़-ब्लॉक शामिल है। शायद अन्य समान कामकाज भी हैं। लेकिन ... किसी भी तरह यह गंदे लगता है, मुझे लगता है कि यह जटिल नहीं होना चाहिए। क्या कोई साफ समाधान है?
ईमानदारी से मैं एक अपवाद एक * अलग * धागा में फेंक दिया पकड़ने की भावना सवाल उठाते हैं। क्या वर्तमान धागे को थ्रेड में शामिल होना है और अपवाद को फेंकने की प्रतीक्षा है? आपने उस सवाल को कवर नहीं किया था। – BalusC
@BalusC: वापस एक कॉलिंग धागा पर एक कार्यकर्ता धागे से एक अपवाद मार्शलिंग कई अनुप्रयोगों का एक आम आवश्यकता है। उदाहरण के लिए, एक यूआई आवेदन कुछ पृष्ठभूमि प्रसंस्करण करने के लिए एक SwingWorker धागा आह्वान कर सकते हैं। यदि प्रसंस्करण विफल रहता है तो अपवाद को इवेंट डिस्पैच थ्रेड पर वापस भेजना होगा। – Adamski
यह एक आम आवश्यकता है। थ्रेड 1, कुछ कार्यों को उत्पन्न करती धागा 2 के माध्यम से इसे कार्यान्वित करता है, लेकिन समझने के लिए अगर यह सफल रहा है या की जरूरत नहीं है (यानी एक अपवाद फेंका)। निष्पादक ढांचा आपको इसके साथ मदद करता है। –