काम नहीं करता मैं निम्नलिखित कोड में धागा समाप्त करने के लिए कोशिश कर रहा हूँ:बाधा()
public synchronized void run() {
try {
while (!Thread.currentThread().isInterrupted()) {
this.scan();
this.distribute();
this.wait();
}
} catch (InterruptedException e) {}
}
public void cancel() {
this.interrupt();
}
लेकिन धागा समाप्त नहीं होंगे। मैंने डीबगर का इस्तेमाल किया और पाया कि this.interrupt()
कमांड के बाद, थ्रेड बाधित नहीं होता है (मैंने this.isInterrupted()
अभिव्यक्ति पर एक घड़ी डाली है और यह false
रहता है)। किसी के पास कोई विचार है कि यह धागा बाधित क्यों नहीं होगा?
संपादित करें:
समस्या पाया गया है। यह पता चला है कि इस धागे के दो उदाहरण थे।
/* (class Detector extends Thread) */
Detector detector = new Detector(board);
...
Thread tdetector = new Thread(detector); /* WRONG!!! */
...
tdetector.start();
...
क्या होगा यदि आप –
स्थिति में 'Thread.interrupted()' के साथ प्रयास करें, तो कोई स्थिर नहीं है उस नाम से वर्ग 'थ्रेड' में विधि। और इसका कोई मतलब नहीं होगा, क्योंकि यह एक तरीका है जो इस वर्ग के उदाहरण से संबंधित है। –
निश्चित रूप से एक स्थिर विधि है ['Thread.interrupted()'] (http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#interrupted%28%29)। मुझे नहीं लगता कि इससे मदद मिलेगी, हालांकि, यह मूल रूप से उदाहरण विधि के समान ही काम करता है (लेकिन बाधित ध्वज को भी साफ़ करता है, जो चीजों को जटिल कर सकता है)। –