Hvad er Vent og underret i Java?



Vent og underret i Java er de to sidste metoder, der gør det muligt for trådene at kommunikere med hinanden. Denne artikel hjælper dig med detaljerne

funktion i Java tillader samtidig udførelse af to eller flere dele af et program. Hver del er en tråd. Disse tråde er ofte nødt til at koordinere deres handlinger. Dette gøres ved hjælp af et par endelige metoder som Vent og underret i Java. Denne artikel hjælper dig med at forstå disse metoder i detaljer.

Jeg diskuterer emnerne i følgende rækkefølge:





Lad os begynde!

Hvad er trådsynkronisering?

Programmer med flere tråde kan regelmæssigt komme op i en situation, hvor flere forsøg på at komme til den samme ressource, der giver falske og forbløffende resultater. Til tider kan mere end en tråd forsøge at få adgang til en delt ressource. Du skal sikre, at ressourcen kun bruges af en tråd ad gangen. Dette kan gøres ved hjælp af Synkronisering i Java.



Nu taler vi om afstemning. Polling er en proces til at teste en tilstand gentagne gange, indtil den er sand. Denne metode er implementeret ved hjælp af for at kontrollere, om en bestemt tilstand er sand eller ej. Du kan bruge denne metode til tråde, men denne metode spilder en masse CPU-cyklusser og også gør implementeringsprocessen meget ineffektiv. For at undgå denne slags fejl introduceres metoder som Vent og Underret i Java.

Hvad er Wait () og Notify () metoder?

For at tackle multithreading-problemet skal du bruge metoder som Vent og Underret i er brugt. Objektklassen bruger disse tre sidste metoder, der gør det muligt for tråde at kommunikere om den låste status for en ressource. De betegnes også som de beskyttede blokke.

generere en tilfældig streng java

Vente()

Denne metode får tråden til at vente, indtil en anden tråd påberåber sig notify () og notifyAll () -metoder til dette objekt. Denne Vent () -metode fortæller opkaldstråden at give slip på en lås og gå i dvale, indtil en anden tråd kommer ind i den samme skærm og kalder for at underrette (). Denne metode frigiver låsen, før den venter, og genvinder låsen, inden den vender tilbage fra ventemetoden ().



Vent () -metoden er tæt integreret med synkroniseringslåsen. Dette gøres ved hjælp af en funktion, der ikke er tilgængelig direkte fra synkroniseringsmekanismen.

Syntaks:

synkroniseret (lockObject) {while (! condition) {lockObject.wait ()} // tag handlingen her}

Den aktuelle tråd skal eje objektets skærm. Det skal kun kaldes fra den synkroniserede metode, ellers kaster det en undtagelse.

Underrette()

Denne metode bruges til at underrette at det skal fungere. Det vækker en tråd, der kaldes vente() metode på det samme objekt.

Bemærk, at du ringer underrette() giver til sidst ikke op en lås. Det fortæller en ventende tråd, at den kan vågne op. Låsen gives dog faktisk ikke op, før anmelderens synkroniserede blok er afsluttet. Sig nu, hvis du ringer underrette() på en ressource, men anmelderen skal stadig udføre handlinger i 10 sekunder inden for den synkroniserede blok, den tråd, der havde ventet, bliver nødt til at vente i det mindste i yderligere 10 sekunder, før meddeleren frigiver låsen på objektet, selvom det underrettes () var blevet kaldt.

Syntaks:

synkroniseret (lockObject) {// etablere_tilstand lockObject.notify () // eventuel yderligere kode, hvis det er nødvendigt}

Meddel alle ()

Denne metode bruges til at vække alle tråde, der havde kaldt wait () på det samme objekt. Tråden med højeste prioritet køres først i det meste af situationen, selvom den ikke er garanteret. Andre ting er det samme som notify () -metoden.

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

Du skal bruge Vent og underret i fordi de er relateret til lås og objekt har en lås. Selvom vent og underret i Java er et ganske grundlæggende koncept, er de defineret i objektklasse . Overraskende nok er det ikke så let at skrive koden ved hjælp af vent og underret. Du kan teste dette ved at skrive kode for at løse producent-forbrugerproblemet ved at vente og give besked. Producentforbrugereksempel-Vent og underret i Java-EdurekaHer har jeg en delt ogto trådehedder Producent og Forbruger . Producent tråd sætter nummeret i en delt kø og Forbruger tråd forbruger numrene fra den delte spand.

Betingelsen er, at når en vare først er produceret, skal forbrugertråden underrettes og lignende, efter at forbrugerproducenttråden skal meddeles. Denne mellemtrådmeddelelseopnås ved hjælp af vent og underret i Java.

Bemærk : W.ait og Nejtify-metoder er defineret i objektklassen, og de skal kaldes inde i synkroniseret blok.

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 udvider Thread1 {int i alt @ Overstyr offentlig ugyldig kørsel () {synkroniseret (dette) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

Bemærk, at i ovenstående eksempel synkroniseres et objekt fra Thread2, dvs. b. Denne b fuldender beregningen, før hovedtråden afgiver sin samlede værdi.

Produktion:

Dette bringer os til slutningen af ​​denne artikel, hvor vi har lært på Vent og underret i Java.Jeg håber, at ovennævnte indhold viste sig at være nyttigt til at forbedre din viden. Fortsæt med at læse, fortsæt med at udforske!

Tjek også ud af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-uddannelses- og certificeringskursus er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige ligesom dvale og forår.