"हैलो, अमीगो! यहाँ एक दिलचस्प सवाल है जो या तो आपके पास पहले से है या आप जल्द ही करेंगे। आप एक चल रहे धागे को कैसे रोकेंगे? "

मान लीजिए कि उपयोगकर्ता प्रोग्राम को "इंटरनेट से फ़ाइल डाउनलोड करने" के लिए कहता है। मुख्य थ्रेड इस कार्य के लिए एक अलग चाइल्ड थ्रेड बनाता है, और इसे एक ऑब्जेक्ट पास करता है जिसकी रन विधि में फ़ाइल डाउनलोड करने के लिए सभी आवश्यक क्रियाएं होती हैं।

लेकिन अचानक यूजर का मन बदल जाता है। वह फाइल डाउनलोड नहीं करना चाहता। हम किसी कार्य को कैसे रद्द कर सकते हैं और थ्रेड को कैसे रोक सकते हैं?

"हाँ बताओ कैसे?"

" हम नहीं कर सकते। यह सबसे सामान्य और सबसे सही उत्तर है। आप किसी थ्रेड को नहीं रोक सकते। केवल वह स्वयं को रोक सकता है। "

लेकिन आप किसी थ्रेड को एक संकेत भेज सकते हैं, किसी तरह यह बता सकते हैं कि काम को अब करने की आवश्यकता नहीं है और इसे समाप्त कर देना चाहिए। जैसे मुख्य थ्रेड मेन मेथड से लौटकर समाप्त होता है, वैसे ही चाइल्ड थ्रेड रन मेथड से वापस आकर समाप्त होता है।

"ऐसा करने का सबसे अच्छा तरीका क्या है?"

"आप कुछ चर जोड़ सकते हैं, जैसे बूलियन । यदि यह सच है , तो थ्रेड चलता है। यदि यह गलत है  , तो थ्रेड समाप्त हो जाना चाहिए। इस तरह, उदाहरण के लिए:"

कोड विवरण
class Clock implements Runnable
{
public void run()
{
while (true)
{
Thread.sleep(1000);
System.out.println("Tick");

if (!ClockManager.isClockRun)
return;
}
}
}

क्लॉक क्लास हमेशा के लिए एक सेकंड में एक बार कंसोल पर «टिक» लिखती है

अगर ClockManager.isClockRun असत्य है, तो रन विधि समाप्त हो जाती है।

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

Thread.sleep(10000);
isClockRun = false;
}

}
मुख्य धागा एक चाइल्ड थ्रेड (घड़ी) शुरू करता है जो हमेशा के लिए चलना चाहिए

10 सेकंड प्रतीक्षा करें और घड़ी को समाप्त होने का संकेत दें।

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

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

"क्या होगा अगर हमारे पास कई धागे हैं, तो क्या?"

"प्रत्येक थ्रेड के लिए इस तरह का एक चर होना सबसे अच्छा है। इसे सीधे कक्षा में जोड़ना सबसे सुविधाजनक है। आप वहां एक बूलियन isRun वैरिएबल जोड़ सकते हैं। हालांकि, एक बूलियन isCancel वैरिएबल जोड़ना बेहतर है जो कार्य के सही होने पर सही हो जाता है। रद्द।"

कोड विवरण
class Clock implements Runnable
{
private boolean isCancel = false;

public void cancel()
{
this.isCancel = true;
}

public void run()
{
while (!isCancel)
{
Thread.sleep(1000);
System.out.println("Tick");
}
}
}
क्लॉक क्लास शब्द «टिक» को कंसोल पर एक सेकंड में एक बार लिखता है जब तक कि रद्द करना गलत है।

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

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

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

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

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

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

"मैं इसे ध्यान में रखूंगा। धन्यवाद, ऐली।"