Hva er Vent og varsle i Java?



Vent og varsle i Java er de to siste metodene som gjør at trådene kan kommunisere med hverandre. Denne artikkelen vil hjelpe deg med detaljene

funksjon i Java tillater samtidig kjøring av to eller flere deler av et program. Hver del er en tråd. Disse trådene må ofte koordinere sine handlinger. Dette gjøres ved å bruke noen få endelige metoder som Vent og varsle i Java. Denne artikkelen vil hjelpe deg med å forstå disse metodene i detalj.

Jeg skal diskutere emnene i følgende rekkefølge:





La oss begynne!

Hva er trådsynkronisering?

Programmer med flere tråder kan regelmessig komme opp i en situasjon der flere forsøke å komme til samme ressurs som gir falske og oppsiktsvekkende resultater. Noen ganger kan mer enn en tråd prøve å få tilgang til en delt ressurs. Du må sørge for at ressursen bare brukes av en tråd om gangen. Dette kan gjøres ved hjelp av Synkronisering i Java.



Snakker nå om polling. Polling er en prosess for å teste en tilstand gjentatte ganger til den er sant. Denne metoden er implementert ved hjelp av for å sjekke om en bestemt tilstand er sann eller ikke. Du kan bruke denne metoden for tråder, men denne metoden kaster bort mange CPU-sykluser og også gjør implementeringsprosessen veldig ineffektiv. For å unngå denne typen feil introduseres metoder som Vent og varsle i Java.

Hva er Wait () og Notify () metoder?

For å takle flertrådeproblemet, metoder som Vent og varsle i er brukt. Objektklassen bruker disse tre siste metodene som gjør at tråder kan kommunisere om den låste statusen til en ressurs. De blir også betegnet som de beskyttede blokkene.

hva gjør iterator i java

Vente()

Denne metoden får tråden til å vente til en annen tråd påkaller notify () og notifyAll () -metoder for dette objektet. Denne Wait () -metoden forteller ringetråden å slippe en lås og gå i dvale til en annen tråd kommer inn i samme skjerm og ringer for å varsle (). Denne metoden frigjør låsen før du venter, og får tilbake låsen før du kommer tilbake fra ventemetoden ().



Vent () -metoden er tett integrert med synkroniseringslåsen. Dette gjøres ved å bruke en funksjon som ikke er tilgjengelig direkte fra synkroniseringsmekanismen.

Syntaks:

synkronisert (lockObject) {while (! condition) {lockObject.wait ()} // ta handlingen her}

Gjeldende tråd må eie objektets skjerm. Det må bare kalles fra den synkroniserte metoden, ellers vil det kaste et unntak.

Gi beskjed()

Denne metoden brukes til å varsle at den trenger å fungere. Den vekker en tråd som kalte vente() metode på samme objekt.

Merk at du ringer gi beskjed() gir til slutt ikke opp en lås. Det forteller en ventetråd at den kan våkne. Låsen blir imidlertid ikke gitt opp før varslers synkroniserte blokk er fullført. Si nå, hvis du ringer gi beskjed() på en ressurs, men varsleren må fremdeles utføre handlinger i 10 sekunder i sin synkroniserte blokk, tråden som hadde ventet, må vente i minst 10 sekunder til varsleren frigjør låsen på objektet, selv om du varsler () hadde blitt kalt.

Syntaks:

synkronisert (lockObject) {// etablere_tilstand lockObject.notify () // eventuell tilleggskode om nødvendig}

Varsle alle ()

Denne metoden brukes til å vekke alle trådene som hadde kalt vent () på det samme objektet. Tråden med høyest prioritet vil først kjøres i det meste av situasjonen, selv om den ikke er garantert. Andre ting er det samme som notify () -metoden.

Hvorfor og hvordan bruke Wait () og Notify () i Java?

Du bør bruke Vent og varsle i fordi de er relatert til lås og objekt har en lås. Selv om vent og varsling i Java er ganske grunnleggende konsept, er de definert i objektklasse . Overraskende nok er det ikke så lett å skrive koden ved å vente og varsle. Du kan teste dette ved å skrive kode for å løse produsent-forbrukerproblemet ved å vente og varsle. Eksempel på produsentens forbrukere - Vent og varsle i Java-EdurekaHer har jeg en delt ogto tråderkalt Produsent og Forbruker . Produsent tråd setter nummeret i en delt kø og Forbruker tråden bruker tallene fra den delte bøtta.

Forutsetningen er at når en vare er produsert, må forbrukertråden varsles og tilsvarende, etter at forbrukerprodusentstråden må varsles. Denne mellomtrådenkommunikasjonoppnås ved bruk av vent og varsling i Java.

Merk : W.ait og neitify-metoder er definert i objektklassen, og de må kalles inne i synkronisert blokk.

Eksempel

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Waiting for 2 to complete ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total er:' + b.total)}}} klasse Thread2 utvider Thread1 {int totalt @Override offentlig ugyldig kjøring () {synkronisert (dette) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

Legg merke til at i eksemplet ovenfor synkroniseres et objekt av Thread2, det vil si b. Denne b fullfører beregningen før hovedtråden skriver ut sin totale verdi.

Produksjon:

Dette fører oss til slutten av denne artikkelen der vi har lært på Vent og varsle i Java.Jeg håper ovennevnte innhold viste seg å være nyttig for å forbedre din kunnskap. Fortsett å lese, fortsett å utforske!

Sjekk også ut av Edureka, et pålitelig online læringsfirma med et nettverk med mer enn 250 000 fornøyde elever spredt over hele verden. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for studenter og fagpersoner som ønsker å være Java-utvikler. Kurset er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige som Hibernate & Spring.