CodeGym /Java Course /தொகுதி 2: ஜாவா கோர் /காத்திருப்பு, அறிவிப்பு மற்றும் அனைத்து முறைகளையும் அறிமு...

காத்திருப்பு, அறிவிப்பு மற்றும் அனைத்து முறைகளையும் அறிமுகப்படுத்துகிறது

தொகுதி 2: ஜாவா கோர்
நிலை 9 , பாடம் 2
கிடைக்கப்பெறுகிறது

"வணக்கம், அமிகோ!"

"ஹாய், ரிஷி!"

"ஆப்ஜெக்ட் வகுப்பின் காத்திருப்பு , அறிவிப்பு மற்றும் அனைத்து முறைகளையும் நான் உங்களுக்கு அறிமுகப்படுத்தப் போகிறேன்."

"இன்று நாங்கள் அவர்களுடன் பழகுவோம், ஆனால் நாங்கள் பின்னர் திரும்பி வந்து இதில் அதிக நேரம் செலவிடுவோம்."

"சரி."

"இந்த முறைகள் நூல் ஒத்திசைவு பொறிமுறையின் ஒரு பகுதியாக கண்டுபிடிக்கப்பட்டது."

"வெவ்வேறு த்ரெட்களில் இருந்து பகிரப்பட்ட ஆதாரங்களை (பொருள்கள்) அணுகுவதைக் கட்டுப்படுத்த ஜாவா ஒரு உள்ளமைக்கப்பட்ட பொறிமுறையைக் கொண்டுள்ளது என்பதை நான் உங்களுக்கு நினைவூட்டுகிறேன். ஒரு பொருள் பிஸியாக இருப்பதாக ஒரு நூல் அறிவிக்க முடியும், மேலும் பிஸியான பொருள் வெளியிடப்படும் வரை மற்ற நூல்கள் காத்திருக்க வேண்டும். "

"எனக்கு நினைவிருக்கிறது. நீங்கள் அதை ஒத்திசைக்கப்பட்ட முக்கிய சொல்லைப் பயன்படுத்தி செய்கிறீர்கள்."

"சரி. பொதுவாக, குறியீடு இப்படி இருக்கும்:"

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

"அது எப்படி வேலை செய்கிறது என்பதை நினைவில் கொள்க?"

"ஆமாம். இரண்டு த்ரெட்கள் ஒரே நேரத்தில் பிரிண்ட்() முறையை அழைத்தால், அவற்றில் ஒன்று ஒத்திசைக்கப்பட்ட பிளாக்கில் நுழைந்து மானிட்டரைப் பூட்டிவிடும், இதனால் மானிட்டர் வெளியிடப்படும் வரை இரண்டாவது திரி காத்திருக்கும்."

"வலது. ஒத்திசைக்கப்பட்டது என்று பெயரிடப்பட்ட தொகுதிக்குள் ஒரு நூல் நுழைந்தவுடன், மானிட்டர் பொருள் பிஸியாகக் குறிக்கப்படும், மேலும் மற்ற த்ரெட்கள் மானிட்டர் பொருள் வெளியிடப்படும் வரை காத்திருக்க வேண்டிய கட்டாயம் ஏற்படும். அதே மானிட்டர் பொருளை நிரலின் பல்வேறு பகுதிகளிலும் பயன்படுத்தலாம். "

"சரி, ஏன் மானிட்டரைத் தேர்ந்தெடுத்தீர்கள்?"

"ஒரு மானிட்டர் என்பது பிஸியான அல்லது இலவச நிலையைச் சேமிக்கும் ஒரு பொருளை நீங்கள் வழக்கமாக அழைக்கிறீர்கள்."

"இங்குதான் காத்திருப்பு மற்றும் அறிவிப்பு முறைகள் செயல்படுகின்றன."

"உண்மையில், இவை உண்மையில் இரண்டு முறைகள் மட்டுமே. மற்றவை இந்த முறைகளின் தழுவல் மட்டுமே."

"இப்போது காத்திருப்பு முறை என்ன, அது ஏன் தேவை என்பதைச் சுற்றி வருவோம் . "

"சில நேரங்களில் ஒரு நிரலில் ஒரு நூல் ஒத்திசைக்கப்பட்ட குறியீட்டின் தொகுதிக்குள் நுழைந்து மானிட்டரைப் பூட்டிவிடும் சூழ்நிலைகள் உள்ளன, ஆனால் சில தரவு இல்லாததால் தொடர முடியாது. எடுத்துக்காட்டாக, அது செயலாக்க வேண்டிய கோப்பு பதிவிறக்கம் முடிக்கப்படவில்லை அல்லது அந்த மாதிரி ஏதாவது."

"கோப்பு பதிவிறக்கப்படும் வரை நாங்கள் காத்திருக்கலாம். நீங்கள் அதை ஒரு லூப்பைப் பயன்படுத்தி சரிபார்க்கலாம். கோப்பு இன்னும் பதிவிறக்கம் செய்யப்படவில்லை என்றால், ஒரு வினாடி அல்லது அதற்கு மேல் தூங்கி, பதிவிறக்கம் ஆகும் வரை மீண்டும் சரிபார்க்கவும்."

"இந்த மாதிரி ஏதாவது:"

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

"ஆனால் எங்கள் விஷயத்தில், இந்த வகையான காத்திருப்பு மிகவும் விலை உயர்ந்தது. எங்கள் த்ரெட் மானிட்டரைப் பூட்டியதால், மற்ற த்ரெட்களும் தங்களுக்குத் தேவையான தரவுகளை ஏற்கனவே வைத்திருந்தாலும் காத்திருக்க வேண்டிய கட்டாயத்தில் உள்ளன."

" இந்தச் சிக்கலைத் தீர்க்க காத்திருப்பு() முறை கண்டுபிடிக்கப்பட்டது. இந்த முறை த்ரெட் மானிட்டரை விடுவித்து, நூலை «நிறுத்துகிறது».

"மானிட்டர் பிஸியாக இருக்கும் போது, ​​மானிட்டர் பொருளின் காத்திருப்பு முறையை மட்டுமே நீங்கள் அழைக்க முடியும், அதாவது ஒத்திசைக்கப்பட்ட தொகுதிக்குள் மட்டுமே. இது நிகழும்போது, ​​த்ரெட் தற்காலிகமாக இயங்குவதை நிறுத்துகிறது, மேலும் மானிட்டர் வெளியிடப்பட்டது, இதனால் மற்ற நூல்கள் அதைப் பயன்படுத்த முடியும்."

"ஒரு நூல் ஒத்திசைக்கப்பட்ட தொகுதிக்குள் நுழைந்து அழைப்பு காத்திருப்பு, இதனால் மானிட்டரை வெளியிடும் நிகழ்வுகள் அடிக்கடி உள்ளன ."

"பின்னர் இரண்டாவது நூல் நுழைந்து இடைநிறுத்தப்படும், பின்னர் மூன்றாவது, மற்றும் பல."

"மற்றும் ஒரு நூல் எவ்வாறு மீண்டும் தொடங்கப்படுகிறது?"

"அதற்கு, இரண்டாவது முறை உள்ளது: அறிவிக்கவும்."

" மானிட்டர் பிஸியாக இருக்கும் போது, ​​நீங்கள் ஒரு மானிட்டர் பொருளின் அறிவிப்பு / அனைத்து முறைகளை மட்டுமே அழைக்க முடியும், அதாவது ஒத்திசைக்கப்பட்ட தொகுதிக்குள் மட்டுமே. notifyAll முறை இந்த மானிட்டர் பொருளில் காத்திருக்கும் அனைத்து த்ரெட்களையும் எழுப்புகிறது."

" அறிவிப்பு முறை ஒரு சீரற்ற நூலை 'அன்ஃப்ரீஸ்' செய்கிறது, ஆனால் notifyAll முறை இந்த மானிட்டரின் அனைத்து "உறைந்த" நூல்களையும் முடக்குகிறது."

"ரொம்ப சுவாரஸ்யம். நன்றி ரிஷி."

"காத்திருப்பு() முறையின் தழுவல்களும் உள்ளன:"

காத்திரு () முறை விளக்கம்
void wait(long timeout)
நூல் "உறைகிறது", ஆனால் அது ஒரு வாதமாக முறைக்கு அனுப்பப்பட்ட மில்லி விநாடிகளின் எண்ணிக்கையை காத்திருந்த பிறகு தானாகவே "உறைகிறது".
void wait(long timeout, int nanos)
நூல் "உறைகிறது", ஆனால் அது ஒரு வாதமாக முறைக்கு அனுப்பப்பட்ட நானோ விநாடிகளின் எண்ணிக்கையை காத்திருந்த பிறகு தானாகவே "உறைகிறது".

"நாங்கள் இதை ஒரு காலக்கெடுவுடன் கூடிய காத்திருப்பு என்றும் அழைக்கிறோம். இந்த முறை சாதாரண காத்திருப்பு போலவே செயல்படுகிறது, ஆனால் குறிப்பிட்ட நேரம் கடந்துவிட்டாலும், நூல் எழுப்பப்படாவிட்டால், அது தன்னைத்தானே எழுப்புகிறது."

கருத்துக்கள்
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION