मैं समझता हूं कि Thread.currentThread().yield()
थ्रेड शेड्यूलर के लिए एक अधिसूचना है कि यह सीपीयू चक्र को उसी प्राथमिकता के किसी अन्य थ्रेड को असाइन कर सकता है यदि कोई ऐसा मौजूद है। मेरा प्रश्न है: यदि वर्तमान थ्रेड को किसी ऑब्जेक्ट पर लॉक हो गया है और yield()
पर कॉल करता है, तो क्या यह तुरंत उस लॉक को खो देगा? और जब थ्रेड शेड्यूलर को पता चलता है कि सीपीयू चक्र को आवंटित करने के लिए ऐसा कोई धागा नहीं है, तो yield()
नामक थ्रेड फिर से उस ऑब्जेक्ट पर लॉक करने के लिए लड़ाई में होगा जो पहले खो गया है ??क्या थ्रेड.इल्ड() सिंक्रनाइज़ विधि के अंदर बुलाए जाने पर ऑब्जेक्ट पर लॉक खो देता है?
मुझे इसे जावाडोक और फ़ोरम में नहीं मिला [http://www.coderanch.com/t/226223/java-programmer-SCJP/certification/does-sleep-yield-release-lock] में 50- 50 जवाब
मुझे लगता है कि yield()
(चलो थ्रेड 1) लॉक जारी करना चाहिए क्योंकि अगर कुछ थ्रेड (थ्रेड 2 कहें) समान प्राथमिकता पर काम करना चाहता है, तो यह मौका हो सकता है जब थ्रेड शेड्यूलर अंततः थ्रेड 2 को कप असाइन करता है।
हम तो निष्कर्ष निकालना चाहिए कि एक धागा के लिए पूछ रहा है, जबकि सिंक्रनाइज़ कोड का एक टुकड़ा चल रहा एक अच्छा विचार नहीं है उपज के लिए? सब के बाद, समय ताला आयोजित किया जाता है कम करने के लिए, आप अपने वर्तमान में चल रहे धागा, जितनी जल्दी हो सके, और उपज के रूप में ब्लॉक समाप्त करने के लिए भी एक संकेत जा रहा है चाहते हैं, अगर ध्यान में रखा, केवल ताला की रिहाई में देरी होगी। –
@edalorzo सहमत हुए। यह व्यर्थ है। लॉक का दावा केवल विनम्रतापूर्वक अन्य धागे को स्थगित करने के लिए क्यों करें? – EJP
यह वास्तव में आपके आवेदन पर निर्भर करता है, लेकिन सामान्य, उपज में() आवश्यक नहीं है। मेरा मतलब है, अगर वहाँ ताला में एक और धागा के लिए आवश्यक काम था, तो यह किया जाना है करने के लिए जा रहा है। –