क्यों नहीं रोक सकता है क्यों मेरा धागा रोका नहीं जा सकता ???थ्रेड
class Threadz {
class runP implements Runnable {
int num;
private volatile boolean exit = false;
Thread t;
public runP() {
t = new Thread(this, "T1");
t.start();
}
@Override
public void run() {
while(!exit) {
System.out.println(t.currentThread().getName()+": "+num);
num++;
try {
t.sleep(200);
} catch(InterruptedException e) {}
}
}
public void stop() {
exit = true;
}
}
public static void main(String[] a) {
runP rp = new Threadz().new runP();
if(rp.num == 1) {rp.stop();}
}
}
यदि मैं rp.num == 0 का उपयोग करता हूं, तो थ्रेड तुरंत बंद किया जा सकता है। लेकिन, जब मैंने rp.num == x बदल दिया (x 0 से अधिक संख्या है) धागा रुक नहीं सकता है? कृपया मुझे इस बात को हल करने में मदद करें ... किसी भी मदद के लिए धन्यवाद।
मुझे लगता है कि 'runP आरपी कुछ ऐसा दिखाई देगा = नया थ्रेडज़()। नया रनपी(); 'थ्रेड बना रहा है और शुरू कर रहा है। हालांकि, 'अगर (rp.num == 1) {rp.stop();}' उस _might_ के ठीक बाद उस अन्य थ्रेड को वास्तव में चलाना शुरू करने से ठीक पहले निष्पादित किया गया था, इसलिए 'num' अभी भी 0 है। इसके अतिरिक्त थ्रेड पहले से ही हो सकता है इस प्रकार 'rp.num == 1' की जांच करने के लिए कई बार चलाएं _very_ नाजुक है और शायद अधिकतर विफल नहीं होगा। – Thomas
कृपया अपने थ्रेड को रोकने के लिए 'rp.num == 1' के बजाय 'rp.num = 1 1' का उपयोग करने पर विचार करें ताकि आप यह सुनिश्चित कर सकें कि आप अपनी स्टॉप स्थिति को गलती से नहीं छोड़ते हैं। – Quota
वास्तव में इस दृष्टिकोण को रखने के लिए आपको AtomicBoolean का उपयोग करने की आवश्यकता है। इसके अलावा आपको == को हिट करने के लिए दोनों धागे के बीच एक प्रीफेक्ट समय की आवश्यकता है। आप – efekctive