2012-12-10 21 views
5

मैं धागे को ExecutorService में खिला रहा हूं।पैरेंट थ्रेड से अपवाद कैसे देखें?

ये धागे कुछ डेटा में हेरफेर कर रहे हैं, और यदि कोई संघर्ष है, तो डेटा ऑब्जेक्ट एक अपवाद फेंकता है, जो विरोधाभासी धागे द्वारा पकड़ा जाता है, जो बदले में बंद हो जाता है और निष्पादन पूरा नहीं करता है।

जब ऐसा होता है, तो निरंतर थ्रेड को कतार में वापस रखा जाना चाहिए और निष्पादक में वापस खिलाया जाना चाहिए।

मैं कैसे बता सकता हूं कि अभिभावक धागे से अपवाद फेंक दिया गया था?

उत्तर

11

जब आप submit()ExecutorService पर कोई कार्य परिणाम के रूप में आपको भविष्य प्राप्त होता है। जब निष्पादन समाप्त हो गया है तो आप उस भविष्य पर get() पर कॉल कर सकते हैं। यदि लागू हो तो यह परिणाम वापस कर देगा, या मूल कार्य को फेंकने पर यह ExecutionException फेंक देगा। यदि आप असली अपवाद ऑब्जेक्ट चाहते हैं तो आप getCause() कर सकते हैं।

यह भी ध्यान रखें कि आप Task सेवा में वापस डाल देंगे, यह कार्य Thread पर चलाया गया है जो वास्तव में समाप्त नहीं हुआ है (केवल अपवाद पकड़ा गया है और एक नया इंतजार कर रहा है)।

यहां एक उदाहरण उपयोग है (यदि आप परिणाम की परवाह नहीं करते हैं तो आप Runnable का उपयोग कर सकते हैं)।

Callable<String> myCallable = ...; 
Future<String> future = myExector.submit(myCallable); 

// Do something else until myCallable.isDone() returns true. 
try { 
    String result = future.get(); 
}catch(ExecutionException e){ 
    // Handle error, perhaps create new Callable to submit. 
} 
+1

मैं जावा के साथ बहुत नया हूं। क्या आप उन कॉल का उपयोग करके एक बेयरबोन उदाहरण निकाल सकते हैं? – Aerovistae

+0

एक उदाहरण जोड़ा गया – Thirler