"हाय, अमीगो!"

"और कुछ और विवरण। चलो इसे व्यावहारिक सलाह कहते हैं।"

"मान लीजिए कि आपके पास एक ऐसी विधि है जो किसी चीज़ की प्रतीक्षा कर रही है और जब तक कोई शर्त पूरी नहीं हो जाती तब तक सो जाती है।"

यदि संग्रह खाली है, तो हम प्रतीक्षा करते हैं
public synchronized Runnable getJob()
{
 if (jobs.size() == 0)
  this.wait();

 return jobs.remove(0);
}

"जावा प्रलेखन बहुत आग्रहपूर्वक प्रतीक्षा विधि को लूप में कॉल करने की अनुशंसा करता है:"

यदि संग्रह खाली है, तो हम प्रतीक्षा करते हैं
public synchronized Runnable getJob()
{
 while (jobs.size() == 0)
  this.wait();

 return jobs.remove(0);
}

"क्यों? बात यह है कि अगर धागा जाग गया, तो इसका मतलब यह नहीं है कि शर्त संतुष्ट है। शायद ऐसे बीस धागे थे। सभी जाग गए, लेकिन एक ही काम ले सकता है।"

"मोटे तौर पर, 'गलत अलार्म' हो सकते हैं। एक अच्छे डेवलपर को इसे ध्यान में रखना चाहिए।"

"ठीक है। क्या केवल सूचना का उपयोग करना आसान नहीं है?"

"ठीक है, क्या होगा यदि सूची में एक से अधिक कार्य थे? आमतौर पर अनुकूलन के लिए अधिसूचना का उपयोग करने की अनुशंसा की जाती है। अन्य सभी मामलों में, अधिसूचना विधि का उपयोग करने की अनुशंसा की जाती है।"

"ठीक है।"

"लेकिन वहाँ अधिक है। सबसे पहले, ऐसी स्थिति हो सकती है जहां कोई आपकी कक्षा को विरासत में लेता है, अपनी विधियों को जोड़ता है, और प्रतीक्षा/सूचना का भी उपयोग करता है। दूसरे शब्दों में, ऐसी स्थिति हो सकती है जहां स्वतंत्र प्रतीक्षा/सूचना सभी जोड़े एक ही वस्तु पर प्रतीक्षा करें और एक दूसरे के बारे में नहीं जानते। तो तुम्हें क्या करना चाहिए?"

"हमेशा एक लूप में प्रतीक्षा करें और जांचें कि लूप की समाप्ति की स्थिति सही है!"

"ठीक है। और यह स्पष्ट करने के लिए कि आप इससे बच नहीं सकते हैं, कई डेवलपर्स बताते हैं कि कभी-कभी धागे स्वयं ही जागते हैं। धागे जो गलती से जागृत नहीं होने की गारंटी देते हैं। यह एक में कोड अनुकूलन का दुष्प्रभाव प्रतीत होता है जावा मशीन चला रहा है।"

"वाह। समझ गया। लूप के बिना, प्रतीक्षा विधि अच्छी नहीं है।"