मेरे जावा एप्लिकेशन पर काम करते समय, मेरे पास एक साधारण मल्टीथ्रेडिंग केस (एक एसिंक्रोनस संसाधन लोडर थ्रेड और लोडर को समाप्त करने के लिए एक मुख्य धागा इंतजार करना, यूआई को प्रगति के साथ अपडेट करना) है, जिसे मैंनेथ्रेड.इल्ड() हानिकारक माना जाता है?
पर कॉल करके हल करने के लिए लगाया मुख्य थ्रेड मेंwhile(!foo.isInitialized()) {
Thread.yield();
}
। मुझे पता है कि अधिक मजबूत समाधान हैं; फिर भी, लोडर मेरे द्वारा डिज़ाइन नहीं किया गया है और यह मूल रूप से केवल पढ़ने योग्य लाइब्रेरी है (मैं केवल wait()
नहीं कर सकता, क्योंकि मैं इसे notify()
नहीं भेज सकता; यह भी खत्म होने के बाद मर नहीं जाता है), और मैं बस लोड होने तक प्रतीक्षा करने की आवश्यकता है।
Java doc का कहना है कि (ध्यान दें कि यह 1.6 डॉक्स में not present था और 1.7 डॉक्स से जोड़ा गया है)
यह शायद ही कभी इस विधि का उपयोग करने के लिए उपयुक्त है।
NetBeans मुझे चेतावनी दी है कि java.lang.Thread
पर विधि yield()
की
प्रार्थना आमतौर पर तुल्यकालन समस्याओं छद्मवेष लिए किया जाता है और बचा जाना चाहिए।
Google Codepro AnalytiX, OTOH, कहते हैं
विधि
Thread.yield()
क्योंकि उसके व्यवहार सभी प्लेटफ़ॉर्म पर संगत नहीं है नहीं किया जाना चाहिए।
मैं उन चेतावनी के साथ संबंध होना चाहिए और एक बेहतर समाधान खोजने की कोशिश (सभी सुझावों का स्वागत करते हैं कर रहे हैं), या मैं "के रूप में चेतावनी शोर" उन पर विचार करने और दबाने चाहिए/उन्हें अनदेखा?
नोट: मैंने sleep()
(Are Thread.sleep(0) and Thread.yield() statements equivalent? का उपयोग करने की स्पष्ट संभावना के बारे में सोचा है) यहां उल्लेख करने लायक है); फिर भी, अगर yield
आईएनजी में लगातार सोते समय कोई "बोनस" नहीं है, तो जावा इसे बिल्कुल क्यों प्रदान करता है - और इसके लिए वास्तविक वैध उपयोग के मामले क्या हैं?
थोड़ा संबंधित: Is there a better solution to Thread.yield()? & Thread.Sleep or Thread.Yield
बहुत हानिकारक है। क्या होगा यदि कोई अन्य तैयार करने के लिए तैयार धागा नहीं है? अगर आप कुछ इंतजार करना चाहते हैं, तो इसके लिए * प्रतीक्षा करें *। –
@ डेविडस्वार्टज़ इसे थ्रेड शेड्यूलर द्वारा अनदेखा किया जाएगा। – Mordechai
हां आपको चिंतित होना चाहिए। क्या आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं, इसकी व्याख्या कर सकते हैं? आपका लक्ष्य यहाँ क्या है? – markspace