"హాయ్, అమిగో!"
"మరియు మరికొన్ని వివరాలు. దానిని ఆచరణాత్మక సలహా అని పిలుద్దాం."
"మీకు ఒక పద్దతి ఉందని అనుకుందాం, అది ఏదో కోసం వేచి ఉండి, ఒక షరతు సంతృప్తి చెందే వరకు నిద్రపోతుంది."
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);
}
"ఎందుకు? విషయం ఏమిటంటే, దారం నిద్రలేస్తే, పరిస్థితి సంతృప్తి చెందిందని అర్థం కాదు. బహుశా అలాంటి ఇరవై స్లీపింగ్ థ్రెడ్లు ఉన్నాయి. అందరూ లేచారు, కానీ ఒకరి పని మాత్రమే తీసుకోవచ్చు."
"సుమారుగా చెప్పాలంటే, 'తప్పుడు అలారాలు' ఉండవచ్చు. మంచి డెవలపర్ దీన్ని తప్పనిసరిగా పరిగణనలోకి తీసుకోవాలి."
"నేను చూస్తున్నాను. నోటిఫైని ఉపయోగించడం సులభం కాదా?"
"సరే, లిస్ట్లో ఒకటి కంటే ఎక్కువ టాస్క్లు ఉంటే ఏమి చేయాలి? సాధారణంగా ఆప్టిమైజేషన్ కోసం ఉపయోగించమని నోటిఫై సిఫార్సు చేయబడింది. అన్ని ఇతర సందర్భాల్లో, నోటిఫైఅల్ పద్ధతిని ఉపయోగించమని సిఫార్సు చేయబడింది."
"అలాగే."
"కానీ ఇంకా చాలా ఉన్నాయి. ముందుగా, ఎవరైనా మీ తరగతిని వారసత్వంగా పొందడం, వారి స్వంత పద్ధతులను జోడించడం మరియు వేచి ఉండటం/అన్నింటిని కూడా ఉపయోగించే పరిస్థితి ఏర్పడవచ్చు. మరో మాటలో చెప్పాలంటే, ఒకే వస్తువుపై అన్ని జతల స్వతంత్రంగా వేచి ఉండే/ప్రకటించే పరిస్థితి ఉండవచ్చు. మరియు ఒకరి గురించి మరొకరికి తెలియదు. కాబట్టి మీరు ఏమి చేయాలి?"
"ఎల్లప్పుడూ లూప్లో వేచి ఉండడానికి కాల్ చేయండి మరియు లూప్ ముగింపు పరిస్థితి నిజమో కాదో తనిఖీ చేయండి!"
"సరియైనది. మరియు మీరు దీని నుండి తప్పించుకోలేరని స్పష్టంగా చెప్పడానికి, చాలా మంది డెవలపర్లు కొన్నిసార్లు థ్రెడ్లు వాటంతట అవే మేల్కొంటాయని అభిప్రాయపడ్డారు. అనుకోకుండా మేల్కొల్పబడదని హామీ ఇవ్వబడిన థ్రెడ్లు. ఇది కోడ్ ఆప్టిమైజేషన్ యొక్క సైడ్ ఎఫెక్ట్గా కనిపిస్తోంది జావా యంత్రాన్ని నడుపుతోంది."
"ఓహో. అర్థమైంది. లూప్ లేకుండా, వేచి ఉండే పద్ధతి మంచిది కాదు."
GO TO FULL VERSION