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

जावा में Wait और Sleep के बीच अंतर

wait() - थ्रेड इस मॉनिटर का ओनरशिप छोड़ देता है और तब तक वेट करता है जब तक कोई अन्य थ्रेड notify() या notifyAll() मेथड के माध्यम से इस ऑब्जेक्ट के मॉनिटर पर वेट कर रहे थ्रेड्स को जगाता नहीं है। थ्रेड तब तक वेट करता है जब तक यह मॉनिटर का ओनरशिप फिर से प्राप्त नहीं कर लेता और एक्जीक्यूशन जारी नहीं रखता।

sleep() - यह मेथड वर्तमान में एक्जीक्यूट हो रहे थ्रेड को निर्दिष्ट मिलीसेकंड्स के लिए स्लीप (अस्थायी रूप से एक्जीक्यूशन रोकना) का कारण बनता है। थ्रेड किसी भी मॉनिटर का ओनरशिप नहीं खोता। यह करंट थ्रेड को निर्दिष्ट समय के लिए "नॉट रननेबल" स्टेट में भेज देता है।

क्र.सं. मुख्य बिंदु Wait Sleep
1 क्लास wait() मेथड Object क्लास से संबंधित है sleep() मेथड Thread क्लास से संबंधित है
2 लॉक रिलीज wait() ऑब्जेक्ट पर लॉक रिलीज कर देता है यह ऑब्जेक्ट पर लॉक रिलीज नहीं करता
3 कॉलिंग कॉन्टेक्स्ट wait() को ऑब्जेक्ट पर ही कॉल किया जा सकता है sleep() को थ्रेड पर कॉल किया जा सकता है
4 वेक-अप कंडीशन ऑब्जेक्ट से notify(), notifyAll() कॉल होने तक कम से कम समय समाप्त होने या interrupt कॉल होने तक
5 स्प्यूरियस वेकअप्स प्रोग्राम को स्प्यूरियस वेकअप्स मिल सकते हैं इसे स्प्यूरियस वेकअप्स नहीं मिलते

उदाहरण

synchronized(lockedObject) {
    while(condition == true) {
        lockedObject.wait(); // lockedObject लॉक रिलीज करता है
    }
    Thread.sleep(100); // करंट थ्रेड को स्लीप पर डालता है
}

महत्वपूर्ण नोट्स

  • wait() हमेशा synchronized ब्लॉक/मेथड के अंदर ही कॉल करना चाहिए, अन्यथा IllegalMonitorStateException थ्रो होता है
  • sleep() कहीं भी कॉल किया जा सकता है, इसके लिए सिंक्रोनाइजेशन की आवश्यकता नहीं होती
  • स्प्यूरियस वेकअप के कारण wait() को हमेशा while लूप में उपयोग करना चाहिए
  • दोनों मेथड्स InterruptedException थ्रो कर सकते हैं जिसे हैंडल करना आवश्यक है
  1. - जावा में Iterator और Enumeration के बीच अंतर

    Iterator और Enumeration दोनों कलेक्शन से एलिमेंट्स को ट्रैवर्स और एक्सेस करने के लिए कर्सर हैं। वे दोनों कलेक्शन फ्रेमवर्क से संबंधित हैं। Enumeration JDK 1.0 में जोड़ा गया था और Iterator JDK 1.2 वर्जन में कलेक्शन फ्रेमवर्क में जोड़ा गया। Enumeration कलेक्शन में स्ट्रक्चरल चेंज नहीं कर सकता क्योंकि

  1. - Java में ArrayList और HashSet के बीच अंतर

    HashSet और ArrayList दोनों Java कलेक्शन फ्रेमवर्क के सबसे महत्वपूर्ण क्लासेस में से कुछ हैं।ArrayList और HashSet के बीच महत्वपूर्ण अंतर निम्नलिखित हैं।क्रमांकमुख्य बिंदुArrayListHashSet1कार्यान्वयनArrayList लिस्ट इंटरफेस का कार्यान्वयन है।दूसरी ओर HashSet सेट इंटरफेस का कार्यान्वयन है।2आंतरिक कार्या

  1. - जावा में wait() और sleep() मेथड में अंतर?

    sleep() मेथड Thread क्लास का एक स्टैटिक मेथड है और यह वर्तमान रनिंग थ्रेड को नॉन-रनेबल स्थिति में भेज सकता है जबकि wait() मेथड एक इंस्टेंस मेथड है, हम इसे थ्रेड ऑब्जेक्ट का उपयोग करके बुलाते हैं और यह केवल उस ऑब्जेक्ट के लिए प्रभावी होता है। sleep() मेथड समय समाप्त होने या interrupt() मेथड बुलाए जा