एक बहु थ्रेडेड एप्लिकेशन को देखते हुए, yield
वर्तमान में निष्पादन को रोकने के लिए थ्रेड निष्पादित करने का कारण बनता है और प्रतीक्षा स्थिति में सेट किया जाएगा। JVM तब एक और थ्रेड चलाएगा जो पहले प्रतीक्षा स्थिति में था।
मुझे विश्वास है कि वही थ्रेड जो अभी पैदा हुआ है तकनीकी रूप से फिर से शुरू करने के लिए निर्धारित किया जा सकता है।
और मुझे अभी तक जंगली में यह देखना नहीं है। तो मुझे लगता है कि इससे बचने के लिए सुरक्षित है।
विस्तार से बता दें:
एक मल्टी-थ्रेडेड वातावरण धागे में अनुसूचित और JVM की इच्छा पर उतर अनिर्धारित और पर कर रहे हैं। इसलिए, अगर उपज को कोड में नहीं कहा जाता है, तो आपका धागा स्वचालित रूप से अन्य थ्रेडों को उत्पन्न कर सकता है जब JVM निर्णय लेता है। यह बहु-थ्रेडिंग को केवल एक प्रोसेसिंग कोर वाले वातावरण में काम करने की अनुमति देता है।
कॉलिंग उपज केवल जेवीएम को एक प्रतीक्षा स्थिति में रखने के लिए जेवीएम बताती है, भले ही JVM नहीं जा रहा था।
मैं एक उदाहरण का प्रयास करेगा:
निम्नलिखित समय के साथ 2 धागे के निष्पादन के लिए एक बहुत ही सरल उदाहरण है (मान 1 कोर) -
Thread\Time 1 2 3 4 5 6 7 8 9
Thread 1 ----------- ----- -------
Thread 2 ------- ---------- ------
जब भी आप एक '-'
मतलब यह है कि एक धागा है देखना क्रियान्वित। एक ' '
का मतलब है कि धागा इंतजार कर रहा है। जैसा कि आप देख सकते हैं, केवल एक ही समय में केवल 1 धागा चल सकता है। तो, जबकि 1 रन, जबकि दूसरा इंतजार कर रहा है। क्या उपज का उद्देश्य अन्य धागे को वर्तमान में चल रहे थ्रेड से आगे बढ़ने का मौका देना है।
मैं डॉन यहां एक प्रश्न नहीं देखें। आपके द्वारा उद्धृत दस्तावेज के बारे में आप क्या नहीं समझते? –
मुझे लगता है कि एक ही प्राथमिकता के धागे में प्राथमिकता वाले धागे शामिल नहीं हैं, जो –
कहलाते हैं, स्रोत कोड कहता है कि यह सभी 'सार्वजनिक स्थैतिक मूल शून्य उपज(); ': पी –