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

Java में थ्रेड के wait() और wait(long) मेथड को कब कॉल कर सकते हैं?

जब भी किसी ऑब्जेक्ट पर wait() मेथड को कॉल किया जाता है, तो यह करंट थ्रेड को तब तक इंतजार करने का कारण बनता है जब तक कि दूसरा थ्रेड इस ऑब्जेक्ट के लिए notify() या notifyAll() मेथड को इनवोक न करे, जबकि wait(long timeout) करंट थ्रेड को तब तक इंतजार करने का कारण बनता है जब तक कि या तो दूसरा थ्रेड इस ऑब्जेक्ट के लिए notify() या notifyAll() मेथड्स को इनवोक न करे, या एक निर्दिष्ट टाइमआउट समय बीत न जाए।

wait()

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

उदाहरण

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 


wait(long)

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

उदाहरण

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. Java में pack() मेथड का उपयोग कब कर सकते हैं? Java में pack() मेथड का उपयोग कब कर सकते हैं?

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

  1. - जावा में सिंक्रोनाइज़्ड ब्लॉक्स का उपयोग कब करें?

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

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

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