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

"ఇప్పుడు నేను మీకు నిద్ర, దిగుబడి మరియు చేరిక పద్ధతుల గురించి కొంచెం చెబుతాను."

"అది విసుగుగా ఉంది. నేను ఇప్పుడే ఒక ఇంటర్వ్యూ ప్రశ్నను కనుగొన్నాను: ' దిగుబడి (), నిద్ర (), మరియు వేచి () పద్ధతుల మధ్య తేడా ఏమిటి ?'. మీరు దానిని వివరించగలరా?"

"సమస్య లేదు. ముందుగా, ఇవి మూడు పూర్తిగా భిన్నమైన పద్ధతులు."

1) స్లీప్(సమయం ముగిసింది)  - సమయం ముగిసిన పరామితి ద్వారా సూచించబడిన మిల్లీసెకన్ల సంఖ్య కోసం ప్రస్తుత థ్రెడ్‌ను (దీనిపై నిద్ర అని పిలుస్తారు) ఆపివేస్తుంది. థ్రెడ్ తర్వాత TIMED_WAITING స్థితికి వెళుతుంది. isInterrupted ఫ్లాగ్ సెట్ చేయబడితే, పద్ధతి ముందుగానే ముగియవచ్చు.

ఉదాహరణ వివరణ
Thread.sleep(500);
ప్రస్తుత థ్రెడ్ దాని స్వంత అమలును 500 మిల్లీసెకన్లు లేదా 0.5 సెకన్ల పాటు నిలిపివేస్తుంది.

2) దిగుబడి()  – ప్రస్తుత థ్రెడ్ 'దాని మలుపును దాటవేస్తుంది'. థ్రెడ్ నడుస్తున్న స్థితి నుండి సిద్ధంగా ఉన్న స్థితికి వెళుతుంది మరియు JVM తదుపరి థ్రెడ్‌కు వెళుతుంది. నడుస్తున్న మరియు సిద్ధంగా ఉన్న రాష్ట్రాలు రన్ చేయదగిన రాష్ట్రానికి ఉప-రాష్ట్రాలు.

ఉదాహరణ వివరణ
Thread.yield();
ప్రస్తుత థ్రెడ్ "దాని మలుపును దాటవేస్తుంది" మరియు జావా వెంటనే తదుపరి థ్రెడ్‌కు మారుతుంది.

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

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

ఉదాహరణ వివరణ
Object monitor = getMonitor();
synchronized(monitor)
{
 …
 monitor.wait(500);
 …
}
వేచి ఉండే పద్ధతిని పిలిచినప్పుడు, ప్రస్తుత థ్రెడ్ మానిటర్ ఆబ్జెక్ట్ యొక్క లాక్‌ని విడుదల చేస్తుంది మరియు 500 మిల్లీసెకన్ల వరకు నిద్రిస్తుంది. మానిటర్ వస్తువును మరొక థ్రెడ్ ద్వారా పొందవచ్చు.
500 మిల్లీసెకన్ల తర్వాత, థ్రెడ్ మేల్కొంటుంది మరియు మానిటర్ బిజీగా లేకుంటే, థ్రెడ్ దానిని పొందుతుంది మరియు పనిని కొనసాగిస్తుంది.
మానిటర్ మరొక థ్రెడ్ ద్వారా లాక్ చేయబడితే, ప్రస్తుత థ్రెడ్ బ్లాక్ చేయబడిన స్థితికి మారుతుంది.

4) చేరండి (సమయం ముగిసింది)

"ఈ పద్ధతి మీ ప్రశ్నలో లేదు, కానీ ఇది నా లెసన్ ప్లాన్‌లో ఉంది, కాబట్టి నేను దీని గురించి మీకు చెప్తాను. మీరు join() లేదా join(timeout) మెథడ్‌కి కాల్ చేసినప్పుడు, ప్రస్తుత థ్రెడ్ థ్రెడ్‌కి 'అటాచ్' చేయబడుతుంది. ఇది ఈ పద్ధతిని పిలిచింది. ప్రస్తుత థ్రెడ్ నిద్రపోతుంది మరియు అది చేరిన థ్రెడ్ పూర్తయ్యే వరకు వేచి ఉంటుంది (అనగా చేరడానికి() పద్ధతిని పిలిచే థ్రెడ్)."

"ప్రస్తుత థ్రెడ్ జాయిన్() పద్ధతి కోసం వేచి ఉండే స్థితికి మరియు జాయిన్(టైమ్ అవుట్) పద్ధతి కోసం TIMED_WAITING స్థితికి ప్రవేశిస్తుంది."

ఉదాహరణ వివరణ
Thread thread = getWorkThread();
thread.join(500);
ప్రస్తుత థ్రెడ్ వర్కర్‌థ్రెడ్ థ్రెడ్‌లో చేరి, అది ముగిసే వరకు వేచి ఉంటుంది.
కానీ అది 500 మిల్లీసెకన్ల తర్వాత 'అన్‌జోయిన్' అవుతుంది మరియు రన్నింగ్‌ను కొనసాగిస్తుంది.

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

"ఈ పద్ధతుల్లో ఉమ్మడిగా ఉన్న ఏకైక విషయం సమయం ముగిసింది. అవి పూర్తిగా భిన్నమైన పనులను చేస్తాయి."

"అవును, అది నిజమే."