Kas yra „Java“ laukimas ir pranešimas?



„Laukti ir pranešti„ Java “yra du paskutiniai metodai, leidžiantys gijoms bendrauti tarpusavyje. Šis straipsnis padės jums išsiaiškinti

„Java“ funkcija leidžia vienu metu vykdyti dvi ar daugiau programos dalių. Kiekviena dalis yra gija. Šios gijos dažnai turi derinti savo veiksmus. Tai daroma naudojant keletą galutinių metodų, tokių kaip „Wait and Notify“ „Java“. Šis straipsnis padės išsamiai suprasti šiuos metodus.

Aptarsiu temas tokia tvarka:





Pradėkime!

Kas yra gijų sinchronizavimas?

Daugialypės programos gali reguliariai susidaryti situaciją, kai kelios bandyti patekti į tą patį šaltinį, kuris sukelia apgaulingus ir stulbinančius rezultatus. Kartais daugiau nei viena gija gali bandyti pasiekti bendrinamą išteklių, turite užtikrinti, kad išteklius vienu metu naudos tik viena gija. Tai galima padaryti naudojant Sinchronizavimas „Java“.



Dabar kalbame apie apklausą. Apklausa yra procesas, kurio metu pakartotinai tikrinama sąlyga, kol ji yra teisinga. Šis metodas įgyvendinamas patikrinti, ar tam tikra sąlyga yra teisinga, ar ne. Šį metodą galite naudoti gijoms, tačiau šis metodas taip pat sugaišta daug procesoriaus ciklų daro įgyvendinimo procesą labai neefektyvų. Norėdami išvengti tokio tipo klaidų, pristatomi tokie metodai kaip „Java“ laukimas ir pranešimas.

Kas yra laukimo () ir pranešimo () metodai?

Norėdami išspręsti daugialypio gijimo problemą, naudokite tokius metodus kaip „Laukti ir pranešti“ yra naudojami. Objektų klasėje naudojami šie trys paskutiniai metodai, leidžiantys gijoms bendrauti apie užrakinto ištekliaus būseną. Jie taip pat vadinami saugomais blokais.

substringas SQL serverio pavyzdžiuose

Laukti()

Šis metodas priverčia giją laukti, kol kita gija iškvies šio objekto metodus pranešti () ir pranešti Visus (). Šis „Wait“ () metodas liepia skambinančiai gijai paleisti užraktą ir eiti miegoti, kol į tą patį monitorių įeis koks kitas siūlas ir paskambins pranešti (). Šis metodas atlaisvina užraktą prieš laukdamas ir vėl užrakinamas prieš grįždamas iš laukimo () metodo.



Laukimo () metodas yra glaudžiai integruotas su sinchronizavimo užraktu. Tai atliekama naudojant funkciją, kurios nėra tiesiogiai iš sinchronizavimo mechanizmo.

Sintaksė:

sinchronizuotas (lockObject) {while (! condition) {lockObject.wait ()} // atlikite veiksmą čia}

Dabartinė gija turi turėti objekto monitorių. Ją reikia iškviesti tik iš sinchronizuoto metodo, kitaip tai padarys išimtį.

Pranešti ()

Šis metodas naudojamas pranešti kad jis turi veikti. Tai pažadina vieną giją, kuri vadinosi laukti() metodas tame pačiame objekte.

Atkreipkite dėmesį, kad skambinate pranešti () galiausiai neatsisako spynos. Tai pasako laukiančiai gijai, kad gali pabusti. Tačiau užrakto atsisakoma tik tada, kai pranešėjo sinchronizuotas blokas bus baigtas. Dabar sakykite, jei paskambinsite pranešti () išteklių, bet pranešėjas vis tiek turi 10 sekundžių atlikti veiksmus sinchronizuotame bloke, laukianti gija turės laukti dar bent 10 sekundžių, kol pranešėjas atleis objekto užraktą, nors praneša () buvo iškviesta.

Sintaksė:

sinchronizuotas (lockObject) {// nustatyti_sąlygą lockObject.notify () // prireikus bet kokį papildomą kodą}

„NotifyAll“ ()

Šis metodas naudojamas pažadinti visas gijas, iškvietusias laukti () tame pačiame objekte. Aukščiausio prioriteto gija pirmiausia bus vykdoma daugumoje situacijų, nors tai nėra garantuota. Kiti dalykai yra tokie patys kaip pranešimo () metodas.

Kodėl ir kaip „Java“ naudoti „Wait“ () ir „Notify“)?

Turėtumėte naudoti laukimo ir pranešimo funkciją nes jie yra susiję su spyna, o objektas turi spyną. Nors laukimas ir pranešimas „Java“ yra gana pagrindinė sąvoka, jie yra apibrėžti objektų klasė . Keista, bet ne taip lengva parašyti kodą naudojant laukti ir pranešti. Tai galite išbandyti rašydami kodą, kad išspręstumėte gamintojo ir vartotojo problemą naudodamiesi laukimo ir pranešimo pranešimais. Gamintojo vartotojo pavyzdys - Palaukite ir praneškite „Java-Edureka“Čia aš turiu bendrą Eilė irdvi gijospaskambino Prodiuseris ir Vartotojas . Prodiuseris gija numeta numerį į bendrą eilę ir Vartotojas gija sunaudoja numerius iš bendro segmento.

Sąlyga yra ta, kad pagaminus prekę, turi būti pranešta apie vartotojo siūlą ir panašiai, kai reikia pranešti apie vartojimo gamintojo siūlą. Ši tarpgijabendravimaspasiekiama naudojant laukimo ir pranešimo Java kalbą.

Pastaba : W.ait ir Nrmetodai yra apibrėžti objektų klasėje, ir jie turi būti iškviesti sinchronizuoto bloko viduje.

Pavyzdys

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Laukiama, kol baigsis 2 ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}}} klasė „Thread2“ pratęsia „Thread1“ {int total @Override public void run () {sinchronizuotas (tai) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

Atkreipkite dėmesį, kad aukščiau pateiktame pavyzdyje sinchronizuojamas „Thread2“ objektas, tai yra b. Šis b užbaigia skaičiavimą, kol pagrindinė gija pateikia bendrą jo vertę.

Išvestis:

Taip pateksime į šio straipsnio pabaigą, kur sužinojome „Java“ laukti ir pranešti.Tikiuosi, kad minėtas turinys pasirodė esąs naudingas tobulinant jūsų žinių. Skaityk toliau, tyrinėk toliau!

Taip pat patikrinkite sukūrė „Edureka“ - patikima internetinė mokymosi įmonė, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą. „Edureka“ mokymai ir sertifikavimo kursai „Java J2EE“ ir „SOA“ skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti kurti „Java“ programavimą ir išmokyti pagrindines ir pažangias „Java“ koncepcijas kartu su įvairiomis kaip „Hibernate & Spring“.