"हाय, अमिगो!

"मला तुम्हाला एका छोट्या, पण मनोरंजक गोष्टीबद्दल सांगायचे आहे."

"मी ऐकत आहे. मला छोट्या आणि मनोरंजक गोष्टी आवडतात."

"ठीक आहे, तुम्हाला माहिती आहे की प्रत्येक थ्रेड ऑब्जेक्टमध्ये रन() पद्धत असते. आणि तुम्ही ती start() पद्धत वापरून वेगळ्या थ्रेडवर कार्यान्वित करू शकता."

"हो, नक्कीच."

"परंतु आता या परिस्थितीची कल्पना करा: तुम्ही काही काम करण्यासाठी धागा सुरू करता, परंतु एक अपवाद टाकला जातो आणि काय करावे हे माहित नसल्यामुळे धागा चालूच थांबतो. तुम्हाला या त्रुटीबद्दल काही तरी माहिती असणे आवश्यक नाही का?"

"मी सहमत आहे. इतर चालू असलेल्या थ्रेडवर आलेला अपवाद मला कसा तरी पकडावा लागेल. जावा त्याला समर्थन देते का?"

"तुम्ही माझा अपमान करता. अर्थातच होतो."

"Java च्या निर्मात्यांनी UncaughtExceptionHandler नावाच्या एका विशेष इंटरफेसचा शोध लावला आहे. जर तो थ्रेड पकडला नाही तर दुसर्‍या थ्रेडवर आढळणारा अपवाद कसा पकडायचा आणि हाताळायचा ते येथे आहे:"

उदाहरण
public class DownloadManager
{
 public static void main(String[] args)
 {
   Thread thread = new DownloadThread();
   thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
   {
    @Override
    public void uncaughtException(Thread t, Throwable e)
    {

    }
 });

 thread.start();
}

"थ्रेड ऑब्जेक्टमध्ये एक विशेष सेटUncaughtExceptionHandler पद्धत आहे. तुम्हाला ती एक ऑब्जेक्ट पास करणे आवश्यक आहे जे Thread.UncaughtExceptionHandler इंटरफेस लागू करते. या इंटरफेसमध्ये फक्त एक पद्धत आहे: uncaughtException(Thread t, Throwable e) . ही पद्धत आहे ज्यावर कॉल केला जाईल. रन पद्धतीमध्ये न पकडलेला अपवाद आढळल्यास पास ऑब्जेक्ट."

"माझ्या वरील उदाहरणात, मी फक्त एक अनामित आतील वर्ग (लाल रंगात हायलाइट केलेला) घोषित करतो जो थ्रेड. थ्रेड. अनकॉटएक्सेप्शनहँडलर इंटरफेस लागू करतो . आणि मी त्याची uncaughtException(Thread t, Throwable e) पद्धत ओव्हरराइड करतो."

"पद्धतीच्या पॅरामीटर सूचीमधून तुम्ही बघू शकता, दोन युक्तिवाद पास केले जातील: थ्रेड ऑब्जेक्टचा संदर्भ जेथे अपवाद आला आहे आणि अपवाद स्वतःच, थ्रोएबल ई म्हणून पास केला जाईल."

"ठीक आहे, मला थ्रेड व्हेरिएबल t ची गरज का आहे? आम्ही कोणत्या थ्रेडमध्ये थ्रेड टाकत आहोत हे आम्हाला आधीच माहित नाही. UncaughtExceptionHandler ऑब्जेक्ट?"

"त्यांनी हे यासाठी केले की तुम्ही या परिस्थितींसाठी एक सार्वत्रिक हँडलर लिहू शकता. म्हणजे तुम्ही एकच ऑब्जेक्ट तयार करू शकता आणि डझनभर वेगवेगळ्या थ्रेड्सवर पास करू शकता. नंतर uncaughtException( Thread t, Throwable e) पद्धत तुम्हाला नेहमी संदर्भ देते. थ्रेड ऑब्जेक्ट जेथे अपवाद आला."

"अधिक काय आहे, तुम्ही डझनभर थ्रेड्स तयार करू शकता, उदाहरणार्थ, विशिष्ट कार्ये करण्यासाठी लूपमध्ये. सर्वसाधारणपणे, थ्रेड ऑब्जेक्टचा हा संदर्भ अनावश्यक होणार नाही. मी तुम्हाला ते वचन देतो."

"माझा तुझ्यावर विश्वास आहे. तू कधीच चुकला नाहीस."