"हैलो, एमिगो! आपको मानना ​​पड़ेगा कि ऐली का रद्द करने का विचार शानदार था।"

"हां।"

"असल में, थ्रेड क्लास में कुछ समान मौजूद है । केवल वेरिएबल को isCancel नहीं कहा जाता है । इसे isInterrupt कहा जाता है । और थ्रेड को रोकने के लिए उपयोग की जाने वाली विधि रद्द नहीं है () । यह इंटरप्ट () है ।"

"वास्तव में?"

"हाँ। इसे देखें:"

कोड विवरण
class Clock implements Runnable
{
public void run()
{
Thread current = Thread.currentThread();

while (!current.isInterrupted())
{
Thread.sleep(1000);
System.out.println("Tick");
}
}
}
क्योंकि कई थ्रेड्स एक ही क्लॉक ऑब्जेक्ट पर रन मेथड को कॉल कर सकते हैं , हमें वर्तमान थ्रेड के लिए थ्रेड ऑब्जेक्ट मिलता है

जब तक वर्तमान थ्रेड का isInterrupt वेरिएबल असत्य है, तब तक क्लॉक वर्ग प्रति सेकंड एक बार कंसोल पर "टिक" शब्द लिखता है।

जब isInterrupt सही हो जाता है , तो रन  विधि समाप्त हो जाती है।

public static void main(String[] args)
{
Clock clock = new Clock();
Thread clockThread = new Thread(clock);
clockThread.start();

Thread.sleep(10000);
clockThread.interrupt();
}
मुख्य धागा एक बाल धागा (घड़ी) शुरू करता है जो हमेशा चलना चाहिए।

10 सेकंड प्रतीक्षा करें और  इंटरप्ट विधि को कॉल करके कार्य को रद्द करें ।

मुख्य धागा अपना काम पूरा करता है।

घड़ी की डोरी अपना काम समाप्त कर देती है।

इसके अलावा, स्लीप मेथड, जिसे लोग रन मेथड में अंतहीन लूप में इस्तेमाल करना पसंद करते हैं , स्वचालित रूप से isInterrupt वेरिएबल की जाँच करता है। यदि कोई थ्रेड स्लीप मेथड को कॉल करता है, तो मेथड पहले यह जांचता है कि क्या उस थ्रेड के लिए isInterrupt सही है। यदि यह सत्य है, तो विधि नहीं सोएगी। इसके बजाय, यह एक इंटरप्टेड एक्सेप्शन अपवाद फेंकता है।

"एक अपवाद क्यों फेंकें? क्या लूप में isCancel() के बजाय isInterrupted() को रखना बेहतर नहीं होगा?"

" सबसे पहले , रन विधि में हमेशा एक लूप नहीं होता है। विधि में अन्य विधियों के लिए कुछ दर्जन कॉल शामिल हो सकते हैं। फिर आपको प्रत्येक विधि कॉल से पहले एक बाधित चेक जोड़ना होगा।"

" दूसरा , कोई विधि जिसमें बहुत सारी विभिन्न कार्रवाइयाँ शामिल होती हैं, निष्पादित होने में बहुत लंबा समय ले सकती हैं।"

" तीसरा , एक अपवाद फेंकना isInterrupted चेक को प्रतिस्थापित नहीं करता है। यह सिर्फ एक सुविधाजनक जोड़ है। फेंका गया अपवाद आपको कॉल स्टैक को जल्दी से रन विधि में वापस लाने की सुविधा देता है।"

" चौथा , नींद की विधि का बहुत उपयोग किया जाता है। जैसा कि यह पता चला है, यह सहायक विधि एक अंतर्निहित जांच से बढ़ी है जो कम सहायक नहीं है। ऐसा लगता है कि किसी ने विशेष रूप से चेक नहीं जोड़ा है, लेकिन वहां है। यह सुपर मूल्यवान है जब आप किसी और के कोड का उपयोग कर रहे हैं और आप स्वयं चेक नहीं जोड़ सकते।"

" पांचवां , अतिरिक्त चेक प्रदर्शन को कम नहीं करता है। स्लीप मेथड को कॉल करने का मतलब है कि थ्रेड को कुछ भी नहीं करना चाहिए (स्लीपिंग को छोड़कर), इसलिए अतिरिक्त काम किसी को परेशान नहीं करता है।"

"वे गंभीर तर्क हैं।"

"और, अंत में , यह है: आपकी रन विधि किसी और के कोड-कोड को कॉल कर सकती है, जिस तक आपकी पहुंच नहीं है (स्रोत कोड और/या कोड बदलने के अधिकार)। इसमें बाधित चेक नहीं हो सकते हैं, और इसका उपयोग हो सकता है " प्रयास करें ... पकड़ें (अपवाद ई) " सभी अपवादों को पकड़ने के लिए।

कोई भी गारंटी नहीं दे सकता कि धागा बंद हो जाएगा। केवल एक धागा ही अपने आप को रोक सकता है।