"హాయ్, అమిగో!"

"హాయ్, రిషీ!"

"నేను మీకు ఆబ్జెక్ట్ క్లాస్ నిరీక్షణ , తెలియజేయడం మరియు అన్ని పద్ధతులను తెలియజేయడం గురించి పరిచయం చేయబోతున్నాను ."

"ఈ రోజు మనం వారితో పరిచయం పెంచుకుంటాము, కాని మేము తరువాత తిరిగి వచ్చి దీనిపై ఎక్కువ సమయం గడుపుతాము."

"సరే."

"థ్రెడ్ సింక్రొనైజేషన్ మెకానిజంలో భాగంగా ఈ పద్ధతులు కనుగొనబడ్డాయి."

"వివిధ థ్రెడ్‌ల నుండి భాగస్వామ్య వనరులకు (వస్తువులు) యాక్సెస్‌ను నియంత్రించడానికి జావా అంతర్నిర్మిత మెకానిజం కలిగి ఉందని నేను మీకు గుర్తు చేస్తున్నాను. ఒక వస్తువు బిజీగా ఉందని థ్రెడ్ ప్రకటించగలదు మరియు ఇతర థ్రెడ్‌లు బిజీగా ఉన్న వస్తువు విడుదలయ్యే వరకు వేచి ఉండాలి. "

"నాకు గుర్తుంది. మీరు సింక్రొనైజ్ చేసిన కీవర్డ్‌ని ఉపయోగించి అలా చేస్తారు ."

"కుడి. సాధారణంగా, కోడ్ ఇలా ఉంటుంది:"

public void print()
{
 Object monitor = getMonitor();
 synchronized(monitor)
 {
  System.out.println("text");
 }
}

"అది ఎలా పని చేస్తుందో గుర్తుందా?"

"అవును. రెండు థ్రెడ్‌లు ఏకకాలంలో ప్రింట్() పద్ధతికి కాల్ చేస్తే, వాటిలో ఒకటి సమకాలీకరించబడిన బ్లాక్‌లోకి ప్రవేశించి, మానిటర్‌ను లాక్ చేస్తుంది, తద్వారా మానిటర్ విడుదలయ్యే వరకు రెండవ థ్రెడ్ వేచి ఉంటుంది."

"కుడి. ఒక థ్రెడ్ సమకాలీకరించబడిన బ్లాక్‌లోకి ప్రవేశించిన తర్వాత, మానిటర్ ఆబ్జెక్ట్ బిజీగా ఉన్నట్లు గుర్తించబడుతుంది మరియు ఇతర థ్రెడ్‌లు మానిటర్ ఆబ్జెక్ట్ విడుదలయ్యే వరకు వేచి ఉండవలసి వస్తుంది. అదే మానిటర్ ఆబ్జెక్ట్‌ని ప్రోగ్రామ్‌లోని వివిధ భాగాలలో ఉపయోగించవచ్చు. "

"అయితే, మీరు మానిటర్ పేరును ఎందుకు ఎంచుకున్నారు?"

"మానిటర్ అంటే మీరు సాధారణంగా బిజీ లేదా ఫ్రీ స్టేటస్‌ని స్టోర్ చేసే వస్తువు అని పిలుస్తారు."

"మరియు ఇక్కడే వేచి మరియు నోటిఫికేషన్ పద్ధతులు అమలులోకి వస్తాయి."

"వాస్తవానికి, ఇవి నిజంగా రెండు పద్ధతులు మాత్రమే. మిగిలినవి కేవలం ఈ పద్ధతుల యొక్క అనుసరణలు మాత్రమే."

"ఇప్పుడు వేచి ఉండే పద్ధతి ఏమిటి మరియు మనకు ఇది ఎందుకు అవసరం అనే దాని చుట్టూ మన తలలు చుట్టుదాం . "

"కొన్నిసార్లు ఒక ప్రోగ్రామ్‌లో థ్రెడ్ సమకాలీకరించబడిన కోడ్ బ్లాక్‌లోకి ప్రవేశించి మానిటర్‌ను లాక్ చేసే సందర్భాలు ఉన్నాయి, కానీ అది కొంత డేటాను కోల్పోయినందున కొనసాగించలేము. ఉదాహరణకు, అది ప్రాసెస్ చేయవలసిన ఫైల్ డౌన్‌లోడ్ పూర్తి కాలేదు లేదా అలాంటిది ఏదో."

"మేము ఫైల్ డౌన్‌లోడ్ అయ్యే వరకు వేచి ఉండగలము. మీరు లూప్‌ని ఉపయోగించి దాన్ని తనిఖీ చేయవచ్చు. ఫైల్ ఇంకా డౌన్‌లోడ్ కానట్లయితే, ఒక సెకను లేదా అంతకంటే ఎక్కువ సమయం పడుకుని, డౌన్‌లోడ్ అయ్యే వరకు మళ్లీ తనిఖీ చేయండి."

"ఇలాంటిది ఏదైనా:"

while(!file.isDownloaded())
{
 Thread.sleep(1000);
}
processFile(file);

"కానీ మా విషయానికి వస్తే, ఈ రకమైన నిరీక్షణ చాలా ఖరీదైనది. మా థ్రెడ్ మానిటర్‌ను లాక్ చేసినందున, ఇతర థ్రెడ్‌లు వారికి అవసరమైన డేటాను కలిగి ఉన్నప్పటికీ కూడా వేచి ఉండవలసి వస్తుంది."

" ఈ సమస్యను పరిష్కరించడానికి వెయిట్() పద్ధతి కనుగొనబడింది. ఈ పద్ధతి థ్రెడ్ మానిటర్‌ను విడుదల చేస్తుంది మరియు థ్రెడ్‌ను «సస్పెండ్ చేస్తుంది».

"మానిటర్ బిజీగా ఉన్నప్పుడు మీరు మానిటర్ ఆబ్జెక్ట్ యొక్క నిరీక్షణ పద్ధతికి మాత్రమే కాల్ చేయవచ్చు, అంటే సింక్రొనైజ్ చేయబడిన బ్లాక్ లోపల మాత్రమే. ఇది జరిగినప్పుడు, థ్రెడ్ తాత్కాలికంగా పనిచేయడం ఆగిపోతుంది మరియు ఇతర థ్రెడ్‌లు ఉపయోగించగలిగేలా మానిటర్ విడుదల చేయబడుతుంది."

"ఒక థ్రెడ్ సింక్రొనైజ్ చేయబడిన బ్లాక్‌లోకి ప్రవేశించి కాల్ వెయిట్ చేసే సందర్భాలు తరచుగా ఉన్నాయి , తద్వారా మానిటర్ విడుదల అవుతుంది."

"అప్పుడు రెండవ థ్రెడ్ ప్రవేశిస్తుంది మరియు తాత్కాలికంగా నిలిపివేయబడుతుంది, ఆపై మూడవది మరియు మొదలైనవి."

"మరియు ఒక థ్రెడ్ ఎలా పునఃప్రారంభించబడుతుంది?"

"దాని కోసం, రెండవ పద్ధతి ఉంది: తెలియజేయండి."

" మానిటర్ బిజీగా ఉన్నప్పుడు మీరు మానిటర్ ఆబ్జెక్ట్ యొక్క నోటిఫై / అన్ని పద్ధతులకు మాత్రమే కాల్ చేయవచ్చు , అంటే సింక్రొనైజ్ చేయబడిన బ్లాక్‌లో మాత్రమే. ఈ మానిటర్ ఆబ్జెక్ట్‌పై వేచి ఉన్న అన్ని థ్రెడ్‌లను notifyAll పద్ధతి మేల్కొంటుంది."

" నోటిఫై మెథడ్ ఒక యాదృచ్ఛిక థ్రెడ్‌ని 'అన్‌ఫ్రీజ్ చేస్తుంది', కానీ నోటిఫైఅల్ మెథడ్ ఈ మానిటర్ యొక్క అన్ని "ఫ్రోజెన్" థ్రెడ్‌లను అన్‌ఫ్రీజ్ చేస్తుంది."

"చాలా ఇంటరెస్టింగ్. ధన్యవాదాలు రిషి."

"నిరీక్షణ() పద్ధతి యొక్క అనుసరణలు కూడా ఉన్నాయి:"

వేచి () పద్ధతి వివరణ
void wait(long timeout)
థ్రెడ్ «ఘనీభవిస్తుంది», కానీ అది ఒక వాదనగా పద్ధతికి ఆమోదించబడిన మిల్లీసెకన్ల సంఖ్య వేచి ఉన్న తర్వాత స్వయంచాలకంగా «అన్‌ఫ్రీజ్ అవుతుంది».
void wait(long timeout, int nanos)
థ్రెడ్ «స్తంభింపజేస్తుంది», కానీ అది ఒక వాదనగా పద్ధతికి పంపబడిన నానోసెకన్ల సంఖ్య వేచి ఉన్న తర్వాత స్వయంచాలకంగా «అన్‌ఫ్రీజ్ అవుతుంది».

"మేము దీనిని గడువుతో కూడిన నిరీక్షణ అని కూడా పిలుస్తాము. ఈ పద్ధతి సాధారణ నిరీక్షణ వలె పని చేస్తుంది, కానీ పేర్కొన్న సమయం దాటినా మరియు థ్రెడ్ మేల్కొనకపోతే, అది స్వయంగా మేల్కొంటుంది."