स्लीप () एक विधि है जिसका उपयोग कुछ सेकंड या उस समय के लिए प्रक्रिया को रखने के लिए किया जाता है, लेकिन प्रतीक्षा के मामले में () विधि थ्रेड प्रतीक्षा स्थिति में जाती है और यह तब तक स्वचालित रूप से वापस नहीं आएगी जब तक कि हम नोटिफ़िकेशन () या notifyAll ()।
बड़ा अंतर यह है कि प्रतीक्षा () ताला या मॉनिटर विज्ञप्ति जबकि नींद () प्रतीक्षा करते हुए किसी भी ताला या मॉनिटर नहीं रिलीज करता है। प्रतीक्षा का उपयोग इंटर-थ्रेड संचार के लिए किया जाता है, जबकि नींद का उपयोग निष्पादन पर रोक लगाने के लिए किया जाता है, आमतौर पर।
थ्रेड.स्लीप () वर्तमान थ्रेड को "नॉट रननेबल" स्थिति में कुछ समय के लिए भेजता है। धागा अपने द्वारा अधिग्रहित किए गए मॉनिटर को रखता है - अर्थात यदि धागा वर्तमान में सिंक्रनाइज़ ब्लॉक या विधि में है, तो कोई अन्य धागा इस ब्लॉक या विधि में प्रवेश नहीं कर सकता है। यदि कोई अन्य थ्रेड t.interrupt () कहता है तो यह स्लीपिंग थ्रेड को जगाएगा। ध्यान दें कि नींद एक स्थिर विधि है, जिसका अर्थ है कि यह हमेशा वर्तमान धागे (नींद की विधि को निष्पादित करने वाली) को प्रभावित करता है। एक सामान्य गलती t.sleep () को कॉल करना है जहां t एक अलग धागा है; फिर भी, यह वर्तमान धागा है जो सोएगा, टी धागा नहीं।
object.wait () वर्तमान थ्रेड को "Not Runnable" स्थिति में भेजता है, जैसे नींद (), लेकिन एक मोड़ के साथ। प्रतीक्षा को एक वस्तु कहा जाता है, एक धागा नहीं; हम इस ऑब्जेक्ट को "लॉक ऑब्जेक्ट" कहते हैं। लॉक होने से पहले। () कहा जाता है, वर्तमान थ्रेड को लॉक ऑब्जेक्ट पर सिंक्रनाइज़ करना चाहिए; प्रतीक्षा () तब इस लॉक को रिलीज़ करता है, और लॉक से जुड़े "प्रतीक्षा सूची" में धागा जोड़ता है। बाद में, एक और धागा एक ही लॉक ऑब्जेक्ट पर कॉल कर सकते हैं और लॉक कर सकते हैं। नोट () करें। यह मूल, प्रतीक्षा धागे को जगाता है। मूल रूप से, प्रतीक्षा () / सूचित () नींद की तरह है () / व्यवधान (), केवल सक्रिय थ्रेड को स्लीपिंग थ्रेड के लिए प्रत्यक्ष सूचक की आवश्यकता नहीं है, लेकिन केवल साझा लॉक ऑब्जेक्ट के लिए।
synchronized(LOCK) {
Thread.sleep(1000); // LOCK is held
}
synchronized(LOCK) {
LOCK.wait(); // LOCK is not held
}
उपरोक्त सभी बिंदुओं को वर्गीकृत करें:
Call on:
- प्रतीक्षा (): किसी वस्तु पर कॉल करें; वर्तमान थ्रेड को लॉक ऑब्जेक्ट पर सिंक्रनाइज़ करना होगा।
- नींद (): एक थ्रेड पर कॉल करें; हमेशा वर्तमान में थ्रेड को निष्पादित करना।
Synchronized:
- प्रतीक्षा (): जब सिंक्रनाइज़ किए गए कई धागे एक ही ऑब्जेक्ट को एक-एक करके एक्सेस करते हैं।
- नींद (): जब सिंक्रनाइज़ किए गए कई धागे नींद के धागे की नींद की प्रतीक्षा करते हैं।
Hold lock:
- प्रतीक्षा (): निष्पादित करने का मौका देने के लिए अन्य वस्तुओं के लिए ताला जारी करें।
- सो जाओ (): कम से कम टी बार लॉकआउट रखें यदि टाइमआउट निर्दिष्ट किया गया है या किसी ने बाधित किया है।
Wake-up condition:
- प्रतीक्षा (): जब तक कॉल नोटिफ़िकेशन (), नोटिफिकेशन () ऑब्जेक्ट से
- नींद (): कम से कम समय समाप्त होने तक या कॉल बाधित ()।
Usage:
- नींद (): समय-तुल्यकालन के लिए और;
- प्रतीक्षा (): बहु-सूत्र-सिंक्रनाइज़ेशन के लिए।
रेफरी: अंतर sleep
औरwait