में लूप किए गए धागे को बाधित करना मैं समझने की कोशिश कर रहा हूं कि जावा में थ्रेड कैसे काम करते हैं और वर्तमान में जांच कर रहे हैं कि लूप किए गए थ्रेड को कैसे कार्यान्वित किया जा सकता है। कोड यह रहा:जावा
public static void main(String[] args) throws Exception {
Thread t = new Thread() {
@Override
public void run() {
System.out.println("THREAD: started");
try {
while(!isInterrupted()) {
System.out.printf("THREAD: working...\n");
Thread.sleep(100);
}
} catch(InterruptedException e) {
// we're interrupted on Thread.sleep(), ok
// EDIT
interrupt();
} finally {
// we've either finished normally
// or got an InterruptedException on call to Thread.sleep()
// or finished because of isInterrupted() flag
// clean-up and we're done
System.out.println("THREAD: done");
}
}
};
t.start();
Thread.sleep(500);
System.out.println("CALLER: asking to stop");
t.interrupt();
t.join();
System.out.println("CALLER: thread finished");
}
धागा मैं बनाने indended अभी या बाद में बाधित हो रहा है। इसलिए, जब मैं प्रतीक्षा प्रकार (sleep
, join
, wait
) में मामलों को संभालने के लिए मुझे InterruptedException
पर जाने की आवश्यकता है, तो मुझे यह तय करने के लिए अवरोधित() ध्वज है।
चीजें मैं स्पष्ट करना चाहते हैं कर रहे हैं:
- यह काम इस तरह का के लिए रुकावट तंत्र का उपयोग करने के लिए ठीक है? (
volatile boolean shouldStop
होने की तुलना में) - क्या यह समाधान सही है?
- क्या यह सामान्य है कि मैं InterruptedException निगलता हूं? मुझे वास्तव में दिलचस्पी नहीं है कि कोड का टुकड़ा क्या था जहां किसी ने मेरे धागे को बाधित करने के लिए कहा था।
- क्या इस समस्या को हल करने के लिए कोई कम तरीका हैं? (मुख्य बिंदु रहा है 'अनंत' पाश)
संपादित जोड़ा गया InterruptedException
के लिए पकड़ में interrupt()
करने के लिए कॉल।
यह ठीक है, लेकिन बेहतर नहीं है क्योंकि इसकी कार्यक्षमता को विस्तारित नहीं किया गया है। एक मानक थ्रेड द्वारा उपयोग किए जाने के लिए एक रननेबल लागू करें। –