दिलचस्प पोस्ट
खींचने के बिना पूरी तरह से छवि को भरने के डिब्बे बनाएं पुनरावर्ती या पुनरावृत्ति? भार पर लारेवल / एलोक्युकेंट मॉडल में कस्टम विशेषता जोड़ें? ग्रैडल और एंड्रॉइड स्टूडियो के जरिए बिल्डिंग और रनिंग ऐप एक्लिप्स के माध्यम से धीमी है यूबुटन उपवर्ग बनाएं कन्वर्ट Enum को स्ट्रिंग करने के लिए बफ़र ओवरफ्लो अपवाद जब अनुप्रयोग का निर्माण करना एजीएक्स का उपयोग कर एक वसंत MVC नियंत्रक के लिए @ अनुरोध में एकाधिक चर पास करना संकल्प एक दूसरे के बाद वादे (यानी अनुक्रम में)? पायथन में दिए गए URL में पैरामीटर जोड़ें सी # अन्य कोड का उपयोग कर PDO MySQL: PDO :: ATTR_EMULATE_PREPARES का उपयोग करें या नहीं? नोडजेएस के अंडे का उपयोग "अज्ञात विकल्प -" और "" त्रुटियों का कारण बनता है जब जावास्क्रिप्ट में डबल नॉट (!!) ऑपरेटर का उपयोग करें WPF विंडो शैली को लागू नहीं किया जा रहा है

मैं एक धागा कैसे मार सकता हूं? स्टॉप () का उपयोग किए बिना;

Thread currentThread=Thread.currentThread(); public void run() { while(!shutdown) { try { System.out.println(currentThread.isAlive()); Thread.interrupted(); System.out.println(currentThread.isAlive()); if(currentThread.isAlive()==false) { shutdown=true; } } catch(Exception e) { currentThread.interrupt(); } } } }); thread.start(); 

Solutions Collecting From Web of "मैं एक धागा कैसे मार सकता हूं? स्टॉप () का उपयोग किए बिना;"

कॉलिंग स्टॉप के विकल्प को थ्रेड को संकेत करने के लिए इंटरप्ट का उपयोग करना है, जिसे आप यह करना चाहते हैं कि यह क्या कर रहा है। (यह धारण करता है कि जिस थ्रेड को आप रोकना चाहते हैं वह अच्छी तरह से व्यवहार किया जाता है, अगर वह फेंका जाने के तुरंत बाद उन्हें बाधित होने पर बाधित उपायों की उपेक्षा करता है और बाधित स्थिति की जांच नहीं करता तो आप स्टॉप () का उपयोग करने के लिए वापस आ सकते हैं।)

यहाँ कुछ कोड है जो मैंने एक थ्रेडिंग प्रश्न का उत्तर के रूप में लिखा था, यह एक उदाहरण है कि कैसे थ्रेड रुकावट कार्य करता है:

 public class HelloWorld { public static void main(String[] args) throws Exception { Thread thread = new Thread(new Runnable() { public void run() { try { while (!Thread.currentThread().isInterrupted()) { Thread.sleep(5000); System.out.println("Hello World!"); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } }); thread.start(); System.out.println("press enter to quit"); System.in.read(); thread.interrupt(); } } 

कुछ चीजों के बारे में जागरूक होना:

  • रुकावटें sleep() और wait() को तुरन्त फेंकने के लिए बाधित हो जाता है, अन्यथा आप सोने के समय के इंतजार के लिए इंतजार में फंस गए हैं।

  • ध्यान दें कि अलग बुलियन ध्वज की कोई ज़रूरत नहीं है

  • थ्रेड को बाधित स्थिति की जाँच करके और रोब के बाहर बाधित होने के बावजूद रुकावट (इसे लूप से बाहर निकलने के लिए) का उपयोग करके सहयोग रोक दिया गया। रुकावट एक जगह है जहां प्रवाह नियंत्रण के लिए एक अपवाद का उपयोग करना ठीक है, यही उसका पूरा मुद्दा है।

  • कैच ब्लॉक में मौजूदा थ्रेड पर इंटरप्ट सेट करना तकनीकी रूप से सबसे अच्छा अभ्यास है लेकिन इस उदाहरण के लिए ओवरकिल है, क्योंकि ऐसा कुछ नहीं है जिसके लिए इंटरप्ट फ्लैग सेट की आवश्यकता होती है।

पोस्ट किए गए कोड के बारे में कुछ टिप्पणियां:

  • पोस्ट किया गया उदाहरण अधूरा है, लेकिन मौजूदा थ्रेड के संदर्भ में एक आवृत्ति चर में एक संदर्भ रखकर लगता है कि यह एक बुरा विचार है। यह जो थ्रेड को ऑब्जेक्ट बना रहा है, थ्रेड को रन विधि निष्पादित करने के लिए आरंभ नहीं किया जाएगा। अगर एक ही रनयनेबल इंस्टेंस को एक से अधिक थ्रेड पर निष्पादित किया जाता है तो इंस्टेंस वर्ल सही धागा को अधिकांश समय पर प्रतिबिंबित नहीं करेगा।

  • थ्रेड लाइव है या नहीं, इसके लिए यह जांच करना हमेशा जरूरी है कि जब तक थ्रेड का निष्पादन समाप्त हो चुका है, तब ही Thread#isAlive गलत है। वापसी झूठी बस क्योंकि यह बाधित हो गया है

  • कॉलिंग Thread#interrupted परिणामस्वरूप अंतरात्मा ध्वज को साफ़ करना होगा, और यहां कोई मतलब नहीं होगा, खासकर जब से रिटर्न वैल्यू खारिज किया जाता है। कॉलिंग Thread#interrupted बिन्दु के बिंदु को Thread#interrupted की स्थिति का परीक्षण करना है और फिर उसे साफ़ करना है, यह उन सुविधा के लिए उपयोग की जाने वाली एक सुविधा विधि है जो इंटरप्टटेड InterruptedException

आमतौर पर, एक थ्रेड समाप्त हो जाता है जब इसे बाधित होता है । तो, देशी बूलीयन का उपयोग क्यों नहीं करें? कोशिश करें इन्वर्टर () :

  Thread t = new Thread(new Runnable(){ @Override public void run() { while(!Thread.currentThread().isInterrupted()){ // do stuff } }}); t.start(); // Sleep a second, and then interrupt try { Thread.sleep(1000); } catch (InterruptedException e) {} t.interrupt(); 

ऐसा करने का अच्छा तरीका धागा को संकेत देने के लिए एक बूलियन ध्वज का उपयोग करना होगा।

 class MyRunnable implements Runnable { public volatile boolean stopThread = false; public void run() { while(!stopThread) { // Thread code here } } } 

Myrunnable नामक एक MyRunnable उदाहरण बनाएँ, इसे एक नया Thread इंस्टेंस में लपेटें और उदाहरण को प्रारंभ करें। जब आप थ्रेड को रोकना चाहते हैं, तो myrunnable.stopThread = true सेट करें। इस तरह, यह कुछ के बीच में नहीं रोकता है, केवल जहां हम इसे रोकना चाहते हैं