2017-07-26 20 views
5

कल्पना कीजिए कि मेरे पास प्रतीक्षा की स्थिति के साथ 3 धागे हैं, और एक चौथा धागा एक अधिसूचना शर्त के साथ है।कौन सा धागा जागृत करता है?

अब, सभी 3 प्रतीक्षा धागे दौड़ें और प्रतीक्षा स्थिति दर्ज करें। एक बार यह हो जाने के बाद, चौथा धागा चलता है और कॉल एक बार सूचित करते हैं।

सूचित करने के लिए कौन सा धागा जागृत करेगा? क्या यह थ्रेड है जिसे पहले थ्रेड का इंतजार कहा जाता है, थ्रेड जिसे आखिरी प्रतीक्षा कहा जाता है, या यह किसी अन्य स्थिति पर आधारित है?

मान लें कि प्रतीक्षा करें और उसी लॉक का उपयोग अधिसूचित करें।

+3

एक यादृच्छिक एक, कम से कम जहाँ तक आप चिंतित हैं, के रूप में। वहाँ javadocs से: "। किसी भी सूत्र इस वस्तु पर इंतजार कर रहे हैं, तो उनमें से एक जागृत करने की पसंद मनमाना है और कार्यान्वयन के विवेक पर होता है चुना जाता है।" – yshavit

उत्तर

7

मेरे ज्ञान के लिए, कोई विशेष बहीखाता - जिसका अर्थ है कि चयन "यादृच्छिक रूप से" बनाया गया है।

किसी भी सूत्र, इस वस्तु पर इंतजार कर रहे हैं, तो उनमें से एक जागृत करने के लिए चुना जाता है:

तो javadoc कहते हैं। पसंद मनमानी है और कार्यान्वयन के विवेकाधिकार पर होता है।

इस प्रकार यह सैद्धांतिक रूप से संभव होगा एक JVM कार्यान्वयन एक विशेष क्रम अधिनियमित करने के लिए फैसला करता है कि; लेकिन दिखाए गए अनुसार - डिफ़ॉल्ट रूप से आप किसी ऑर्डर की अपेक्षा नहीं कर सकते हैं। तो आपको कोड नहीं लिखना चाहिए जो कि इस तरह के एक विशिष्ट आदेश पर निर्भर करता है।

0

सूचित() विधि के लिए दस्तावेज़ देखें।

इस ऑब्जेक्ट के मॉनिटर पर प्रतीक्षा कर रहे एक भी थ्रेड को जगाता है। यदि इस ऑब्जेक्ट पर कोई भी थ्रेड प्रतीक्षा कर रहा है, तो उनमें से एक को जागृत करने के लिए चुना गया है। पसंद मनमाना है और कार्यान्वयन के विवेक पर होता है।

संबंधित मुद्दे