Mis on Java-s ootamine ja teavitamine?



Oota ja teavita Java-s on kaks viimast meetodit, mis võimaldavad lõimedel omavahel suhelda. See artikkel aitab teil üksikasjadega tutvuda

Java funktsioon võimaldab samaaegselt käivitada kahte või enamat programmi osa. Iga osa on lõime. Need lõimed peavad sageli oma tegevust kooskõlastama. Selleks kasutatakse mõnda viimast meetodit nagu Java-s ootamine ja teavitamine. See artikkel aitab teil neid meetodeid üksikasjalikult mõista.

Ma arutlen teemadel järgmises järjekorras:





Alustagem!

Mis on lõime sünkroniseerimine?

Mitme lõimega programmid võivad regulaarselt tulla olukorrani, kus mitu katse jõuda samale ressursile, mis annab petturlikke ja hämmastavaid tulemusi. Mõnikord võib mitu jagatud ressurssi proovida juurde pääseda, peate tagama, et ressurssi kasutab korraga ainult üks lõim. Seda saab teha kasutades Java-sünkroniseerimine.



Nüüd räägime valimisest. Küsitlus on seisundi korduva testimise protsess, kuni see vastab tõele. Seda meetodit rakendatakse kontrollida, kas konkreetne tingimus vastab tõele või mitte. Seda meetodit saate kasutada lõimede jaoks, kuid see meetod raiskab palju protsessori tsükleid ja ka muudab rakendamise protsessi väga ebaefektiivseks. Selliste vigade vältimiseks tutvustatakse Java-s selliseid meetodeid nagu Wait and Notify.

Mis on meetodid Oota () ja Teata ()?

Mitmikeermeliste probleemide lahendamiseks kasutage selliseid meetodeid nagu Oota ja teavitage kasutatakse. Klass Object kasutab neid kolme viimast meetodit, mis võimaldavad lõimedel suhelda ressursi lukustatud oleku kohta. Neid nimetatakse ka valvatud blokkideks.

ssis õpetus algajatele 2012 koos näidetega

Oota ()

See meetod paneb lõime ootama, kuni teine ​​lõim kutsub selle objekti meetodid teavitama () ja teatama Kõik (). See meetod Oota () käsib helistaval lõimul lukust lahti lasta ja magama minna, kuni mõni muu lõime siseneb samasse monitori ja kutsub teavitama (). See meetod vabastab luku enne ootamist ja omandab luku enne meetodilt wait () naasmist.



Wait () meetod on sünkroonimislukuga tihedalt integreeritud. Selleks kasutatakse funktsiooni, mida pole otse sünkroonimismehhanismi kaudu saadaval.

Süntaks:

sünkroonitud (lockObject) {while (! condition) {lockObject.wait ()} // toimige siin}

Praegune niit peab kuuluma selle objekti kuvarile. Seda tuleb kutsuda ainult sünkroonitud meetodilt, muidu loob see erandi.

Teata ()

Seda meetodit kasutatakse et see peab toimima. See äratab ühe lõime, mis kutsus oota () meetod samal objektil.

Pange tähele, et helistamine teatama () lõpuks lukust ei loobu. See ütleb ootavale niidile, et võib üles ärgata. Lukust loobutakse aga tegelikult alles siis, kui teataja sünkroonitud plokk on lõpule jõudnud. Nüüd öelge, kui helistate teatama () ressursil, kuid teavitaja peab siiski sünkroonitud plokis 10 sekundit toiminguid tegema, ootama pidanud lõim peab ootama veel vähemalt 10 sekundit, kuni teavitaja vabastab objekti luku, kuigi teavitab () oli helistatud.

Süntaks:

sünkroonitud (lockObject) {// luua_tingimus lockObject.notify () // vajadusel lisakood}

NotifyAll ()

Seda meetodit kasutatakse kõigi niitide äratamiseks, mis kutsusid ootama () samal objektil. Kõrgeima prioriteediga lõim käivitatakse kõigepealt enamikus olukordades, kuigi see pole tagatud. Muud asjad on samad mis teavitamise () meetod.

Miks ja kuidas Java-s Wait () ja Notify () kasutada?

Peaksite rakenduses Ootel ja teatama kasutama kuna need on seotud lukuga ja objektil on lukk. Ehkki Java-s ootamine ja teatamine on üsna põhimõtteline mõiste, on need defineeritud objektiklass . Üllatuslikult pole koodi ootamise ja teatamise abil nii lihtne kirjutada. Seda saate testida, kirjutades koodi, et lahendada tootja ja tarbija probleem ootamise ja teavitamise abil. Tootja tarbija näide-Oota ja teavita Java-EdurekasSiin on mul jagatud Järjekord jakaks niitihelistas Produtsent ja Tarbija . Produtsent lõim paneb numbri jagatud järjekorda ja Tarbija lõime kulutab jagatud ämbrist numbreid.

Tingimus on, et kui toode on toodetud, tuleb sellest teavitada tarbijaniiti ja samamoodi ka pärast seda, kui on vaja teavitada tarbijatooteid. See lõimeülenesuhtleminesaavutatakse Java-s ootamise ja teavitamise abil.

Märge : W.ait ja nrtify meetodid on määratletud objektiklassisja neid tuleb kutsuda sünkroniseeritud plokis.

Näide

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Ootan, kuni 2 lõpeb ... ' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}}} klass Thread2 laiendab Thread1 {int total @Override public void run () {sünkroniseeritud (see) {jaoks (int i = 0 i<=100 i++) { total += i } notify() }}}

Pange tähele, et ülaltoodud näites on Thread2 objekt sünkroniseeritud. See b lõpetab arvutuse enne, kui põhilõim väljastab selle koguväärtuse.

Väljund:

See viib meid selle artikli lõppu, kus oleme õppinud jaotises Oota ja teavita Java-s.Loodan, et ülalnimetatud sisu osutus teie veebisaidi täiustamiseks kasulikuks teadmisi. Jätkake lugemist, jätkake uudistamist!

Vaadake ka välja autor Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik koosneb enam kui 250 000 rahulolevast õppijast ja mis levib üle kogu maailma. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud õpilastele ja spetsialistidele, kes soovivad olla Java arendajad. Kursus on loodud selleks, et anda teile Java-programmeerimises alustamine ja õpetada teid nii Java-põhiprogrammide kui ka edasijõudnute jaoks koos erinevate mõistetega nagu talveunerežiim ja kevad.