Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

हम जावा में थ्रेड के प्रतीक्षा() और प्रतीक्षा (लंबी) विधियों को कब कॉल कर सकते हैं?

जब भी प्रतीक्षा करें () किसी ऑब्जेक्ट पर विधि को कॉल किया जाता है, यह वर्तमान थ्रेड को तब तक प्रतीक्षा करने का कारण बनता है जब तक कि कोई अन्य थ्रेड सूचित() को आमंत्रित नहीं करता है। या सभी को सूचित करें () इस ऑब्जेक्ट के लिए विधि जबकि प्रतीक्षा करें (लंबा समय समाप्त) वर्तमान थ्रेड को तब तक प्रतीक्षा करने का कारण बनता है जब तक कि कोई अन्य थ्रेड सूचित () . को आमंत्रित नहीं करता है या सभी को सूचित करें () इस ऑब्जेक्ट के लिए विधियाँ, या एक निर्दिष्ट समयबाह्य समय बीत चुका है।

प्रतीक्षा करें ()

नीचे दिए गए कार्यक्रम में, जब प्रतीक्षा करें() किसी ऑब्जेक्ट पर कॉल किया जाता है, थ्रेड रनिंग से वेटिंग स्टेट तक . में प्रवेश करता है . यह सूचित करें () . को कॉल करने के लिए किसी अन्य थ्रेड की प्रतीक्षा करता है या सभी को सूचित करें () ताकि यह चलने योग्य स्थिति में प्रवेश कर सके, एक गतिरोध बन जाएगा।

उदाहरण

class MyRunnable implements Runnable {
   public void run() {
      synchronized(this) {
         System.out.println("In run() method");
         try {
            this.wait();
            System.out.println("Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()");
         } catch (InterruptedException ie) {
            ie.printStackTrace();
         }
      }
   }
}
public class WaitMethodWithoutParameterTest {
   public static void main(String[] args) {
       MyRunnable myRunnable = new MyRunnable();
       Thread thread = new Thread(myRunnable, "Thread-1");
       thread.start();
   }
}

आउटपुट

In run() method


प्रतीक्षा करें(लंबी)

नीचे दिए गए कार्यक्रम में, जब प्रतीक्षा करें(1000) ऑब्जेक्ट पर कॉल किया जाता है, थ्रेड रनिंग से वेटिंग स्टेट में प्रवेश करता है, भले ही सूचित करें() या सभी को सूचित करें () टाइमआउट समय बीत जाने के बाद कॉल नहीं किया जाता है, थ्रेड रन करने योग्य स्थिति की प्रतीक्षा कर रहा है।

उदाहरण

class MyRunnable implements Runnable {
   public void run() {
      synchronized(this) {
         System.out.println("In run() method");
         try {
            this.wait(1000); 
            System.out.println("Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()");
         } catch (InterruptedException ie) {
            ie.printStackTrace();
         }
      }
   }
}
public class WaitMethodWithParameterTest {
   public static void main(String[] args) {
      MyRunnable myRunnable = new MyRunnable();
      Thread thread = new Thread(myRunnable, "Thread-1");
      thread.start();
   }
}

आउटपुट

In run() method
Thread in waiting state, waiting for some other threads on same object to call notify() or notifyAll()

  1. हम जावा में पैक () विधि का उपयोग कब कर सकते हैं?

    द पैक() विधि विंडो . में परिभाषित है जावा में वर्ग और यह फ्रेम को आकार देता है ताकि इसकी सभी सामग्री उनके पसंदीदा आकार पर या उससे ऊपर हो। पैक() . का एक विकल्प विधि setSize() . को कॉल करके स्पष्ट रूप से एक फ्रेम आकार स्थापित करना है या सेटबाउंड्स () तरीके। सामान्य तौर पर, पैक () . का उपयोग करते हु

  1. हम Java में Synchronized Blocks का उपयोग कब कर सकते हैं?

    एक सिंक्रनाइज़ किया गया अवरुद्ध करें कोड का एक टुकड़ा है जिसका उपयोग विधि के किसी विशिष्ट संसाधन पर सिंक्रनाइज़ेशन करने के लिए किया जा सकता है। एक सिंक्रनाइज़ किया गया ब्लॉक किसी साझा संसाधन के लिए किसी ऑब्जेक्ट को लॉक करने के लिए उपयोग किया जाता है और एक सिंक्रनाइज़ ब्लॉक का दायरा सिंक्रनाइज़ की ग

  1. Java में Thread.start() के बजाय Thread.run() को कब कॉल करें?

    जब हम प्रारंभ() . को कॉल करते हैं थ्रेड पर विधि यह थ्रेड को निष्पादन शुरू करने का कारण बनती है और run() थ्रेड की विधि को जावा वर्चुअल मशीन(JVM) . द्वारा कहा जाता है . अगर हम सीधे रन () . को कॉल करते हैं विधि, इसे सामान्य . के रूप में माना जाएगा ओवरराइड विधि एक थ्रेड क्लास (या रन करने योग्य इंटरफ़ेस