Kas ir gaidīšana un paziņošana Java?



Gaidīšana un paziņošana Java ir divas pēdējās metodes, kas ļauj pavedieniem sazināties savā starpā. Šis raksts palīdzēs jums uzzināt sīkāku informāciju

Java funkcija ļauj vienlaikus izpildīt divas vai vairākas programmas daļas. Katra daļa ir pavediens. Šīm tēmām bieži ir jāsaskaņo viņu darbības. Tas tiek darīts, izmantojot dažas pēdējās metodes, piemēram, Wait and Notify Java. Šis raksts palīdzēs detalizēti izprast šīs metodes.

Es apspriedīšu tēmas šādā secībā:





Sāksim!

Kas ir pavedienu sinhronizācija?

Programmas ar vairākiem pavedieniem var regulāri nākt klajā ar situāciju, kad vairākas mēģinājums nokļūt pie tā paša resursa, kas rada krāpnieciskus un pārsteidzošus rezultātus. Reizēm vairāk nekā viens pavediens var mēģināt piekļūt koplietotam resursam. Jums jānodrošina, lai resursu vienlaikus izmantotu tikai viens pavediens. To var izdarīt, izmantojot Sinhronizācija Java.



Tagad runājam par aptauju. Aptauja ir procesa atkārtota pārbaude, līdz tā ir patiesa. Šī metode tiek ieviesta ar lai pārbaudītu, vai konkrēts nosacījums ir patiess vai nē. Šo metodi var izmantot pavedieniem, taču šī metode izšķērdē daudz CPU ciklu un arī padara ieviešanas procesu ļoti neefektīvu. Lai izvairītos no šāda veida kļūdām, tiek ieviestas tādas metodes kā Wait and Notify Java.

Kas ir gaidīšanas () un paziņošanas () metodes?

Lai risinātu vairāku pavedienu problēmu, tiek izmantotas tādas metodes kā Wait and Notify in tiek izmantoti. Objektu klase izmanto šīs trīs pēdējās metodes, kas ļauj pavedieniem sazināties par resursa bloķēto statusu. Viņus sauc arī par apsargātajiem blokiem.

kārtojot masīvu c ++ programmā

Pagaidiet ()

Šī metode liek pavedienam gaidīt, kamēr cits pavediens izsauc šī objekta metodes paziņot () un paziņot Visas (). Šī metode Wait () liek izsaucošajam pavedienam atlaist bloķēšanu un gulēt, līdz tajā pašā monitorā ienāk kāda cita pavediena un zvana, lai paziņotu (). Šī metode pirms gaidīšanas atbrīvo slēdzeni un pirms atgriešanās no metodes wait () atgūst to.



Wait () metode ir cieši integrēta ar sinhronizācijas bloķētāju. Tas tiek darīts, izmantojot funkciju, kas nav pieejama tieši no sinhronizācijas mehānisma.

Sintakse:

sinhronizēts (lockObject) {while (! condition) {lockObject.wait ()} // veiciet darbību šeit}

Pašreizējam pavedienam jābūt tā objekta monitoram. Tas jāizsauc tikai no sinhronizētās metodes, pretējā gadījumā tas radīs izņēmumu.

Paziņot()

Šo metodi izmanto, lai paziņotu ka tai jādarbojas. Tas pamodina vienu pavedienu, kas saucās pagaidiet () metodi uz to pašu objektu.

Ņemiet vērā, ka zvana paziņot() galu galā neatsakās no slēdzenes. Tas stāsta gaidīšanas pavedienu, ka tas var pamodināt. Tomēr bloķēšana faktiski netiek atteikta, kamēr paziņotāja sinhronizētais bloks nav pabeigts. Tagad saki, ja zvani paziņot() resursam, bet paziņotājam joprojām ir jāveic darbības 10 sekundes sinhronizētajā blokā, pavedienam, kas bija gaidījis, būs jāgaida vēl vismaz 10 sekundes, līdz paziņotājs atbrīvo objekta bloķēšanu, kaut arī paziņot () bija izsaukts.

Sintakse:

sinhronizēts (lockObject) {// izveido_nosacījuma lockObject.notify () // vajadzības gadījumā jebkuru papildu kodu}

NotifyAll ()

Šo metodi izmanto, lai modinātu visus pavedienus, kas tajā pašā objektā bija izsaukuši wait (). Augstākās prioritātes pavediens vispirms darbosies lielākajā daļā situāciju, kaut arī tas nav garantēts. Citas lietas ir tādas pašas kā paziņošanas () metode.

Kāpēc un kā Java lietot lietot Wait () un Notify ()?

Vietnē Wait un Notify ir jāizmanto jo tie ir saistīti ar slēdzeni un objektam ir slēdzene. Lai gan gaidīšana un paziņošana Java valodā ir diezgan būtisks jēdziens, tie ir definēti objektu klase . Pārsteidzoši, bet uzrakstīt kodu, izmantojot gaidīšanas un paziņošanas procesu, nav tik vienkārši. To var pārbaudīt, ierakstot kodu, lai atrisinātu ražotāja un patērētāja problēmu, izmantojot gaidīšanas un paziņošanas funkciju. Ražotāja patērētāja piemērs - Uzgaidiet un paziņojiet Java-EdurekaLūk, man ir kopīgots Rinda undivi pavedienisauca Producents un Patērētājs . Producents pavediens ievieto numuru koplietojamā rindā un Patērētājs pavediens patērē numurus no koplietotās grupas.

Nosacījums ir tāds, ka pēc preces izgatavošanas ir jāpaziņo patērētāja pavediens un līdzīgi pēc tam, kad jāpaziņo patērētāja pavedienam. Šis starp pavedienskomunikācijatiek sasniegts, izmantojot gaidīšanu un paziņošanu Java.

Piezīme : W.ait un Nrtify metodes ir definētas objektu klasē, un tie jāsauc sinhronizētajā blokā.

Piemērs

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Gaida, kamēr beigsies 2 ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}}} klase Thread2 paplašina Thread1 {int total @Override public void run () {sinhronizēts (šis) {par (int i = 0 i<=100 i++) { total += i } notify() }}}

Ievērojiet, ka iepriekš minētajā piemērā tiek sinhronizēts Thread2 objekts, tas ir, b. Šis b pabeidz aprēķinu, pirms galvenais pavediens izsniedz tā kopējo vērtību.

Izeja:

Tas mūs noved pie šī raksta beigām, kur mēs esam iemācījušies par gaidīšanu un paziņošanu Java.Es ceru, ka iepriekš minētais saturs izrādījās noderīgs, lai uzlabotu jūsu zināšanas. Turpini lasīt, turpini izpētīt!

Pārbaudiet arī Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts studentiem un profesionāļiem, kuri vēlas būt Java izstrādātāji. Kurss ir paredzēts, lai dotu jums sākumu Java programmēšanā un apmācītu gan pamata, gan uzlabotas Java koncepcijas kopā ar dažādām piemēram, Hibernate & Spring.