Nøkkelforskjell – søvn og venting i Java
Søvn og vent er to metoder som brukes for multithreading i Java. Søvnmetoden tilhører Thread-klassen mens ventemetoden er fra Object-klassen. Den viktigste forskjellen mellom dvale og vente i Java er at dvalen brukes til å suspendere utførelsen av den gjeldende tråden i det angitte antall millisekunder mens ventemetoden brukes til å få den gjeldende tråden til å vente til en annen tråd påkaller varslingen eller notifyAll-metoden for objektet.
En tråd er den minste behandlingsenheten i operativsystemet. Det er en enkelt sekvensiell flyt av kontroll i et program. Trådene er lette. Multithreading er mekanismen for å kjøre flere tråder samtidig. Programmeringsspråk som Java støtter multithreading. Multithreading har fordeler fordi det gjør det mulig å kjøre flere tråder samtidig og trådene er uavhengige av hverandre. Det finnes metoder i Java som kan brukes til multithreading. To av dem sover og venter.
Hva er søvn i Java?
Det er flere prosesser som kjører i et operativsystem. En prosess er et program under utførelse. Hver prosess kan ha flere tråder, og det skjer en kontekstbytte mellom disse trådene. I Java er det to måter å lage en tråd på. Det er ved å utvide trådklassen eller ved å implementere Runnable-grensesnitt. Thread-klassen har konstruktører og metoder for å lage og utføre operasjoner på en tråd. Thread-klassen utvider Object-klassen og implementerer Runnable-grensesnitt. Runnable-grensesnittet bør implementeres av enhver klasse hvis forekomster er ment å bli utført av en tråd. Når tråden kjøres, skrives koden som skal kjøres inne i kjøremetoden. Tråden som skal kjøres velges av trådplanleggeren. Bare én tråd kjører i én enkelt prosess.
En tråd går gjennom flere faser. Etter å ha opprettet et objekt av Thread-klassen, kan programmereren påkalle startmetoden. Før du påkaller den metoden, sies det at tråden er i den nye tilstanden. Trådplanleggeren velger en tråd som skal kjøres. Hvis tråden ennå ikke er valgt av trådplanleggeren, men hvis startmetoden påkalles, er tråden i en kjørbar tilstand. Etter at trådplanleggeren velger tråden som skal kjøres, går den over til kjøretilstand. Hvis tråden er i live, men for øyeblikket ikke er kvalifisert til å kjøre, er den i ikke-kjørbar eller blokkert tilstand. Etter fullføring av kjøringsmetoden går tråden til den avsluttede tilstanden. Dette er hovedfasene i trådens livssyklus.
Det er forskjellige metoder tilgjengelig i trådklassen for å utføre forskjellige oppgaver. Søvnmetoden brukes til å sove metoden i en bestemt tidsperiode. Syntaksen for søvnmetoden er offentlig ugyldig søvn (lange millisekunder) kaster InterruptedException. Det fører til at tråden som kjører for øyeblikket stopper kjøringen midlertidig i et spesifisert antall millisekunder. Hvis en annen tråd avbryter den gjeldende tråden, slettes den avbrutte statusen til den gjeldende tråden når dette unntaket blir kastet.
Figur 01: Java-program med søvnmetode
I følge programmet ovenfor inneholder kjøremetoden kode som skal kjøres. I hovedprogrammet opprettes to objekter av Eksempeltråd1, og startmetodene påkalles på dem. Det vil tillate å kjøre koden inne i kjøremetoden. Bare én tråd kjøres om gangen. Med tråden.søvn (1000); vil tillate den første tråden å avslutte utførelsen i 1000 millisekunder. Når en tråd er i dvale, plukker trådplanleggeren opp den andre tråden.
Hva er ventetid i Java?
Flere tråder kan få tilgang til en delt ressurs. Det kan føre til å generere feil utgang. Trådsynkronisering kan brukes til å lage bare én tråd for å få tilgang til den delte ressursen. Anta en situasjon som følger. Hvis det er to tråder som t1 og t2, begynner t1 å lagre verdier i en tekstfil k alt Text1.txt. Disse verdiene vil bli brukt for en annen beregning når t1 returnerer. Hvis t2 starter før t1 kommer tilbake, kan t2 endre verdiene som er lagret av t1. Dette kan føre til at t1 gir feil utgang. Ved hjelp av synkronisering, når t1 begynner å bruke Text1.txt-filen, kan den filen låses, så den er bare tilgjengelig for t1. t2 kan ikke endre det før t1 slipper låsen for å få tilgang til den tekstfilen. Når oppgaven er fullført, kan t1 frigjøre låsen. Låsen er også kjent som monitoren.
Trådsynkronisering kan oppnås ved kommunikasjon mellom tråder. En kritisk seksjon er et kodesegment som får tilgang til de delte ressursene. I kommunikasjonen mellom trådene blir en tråd satt på pause i dens kritiske seksjon, og en annen tråd tillates å gå inn i den samme kritiske seksjonen som skal kjøres. Det implementeres ved å bruke vente, varsle og varsle alle metoder. De tilhører klassen Objekt. Ventemetoden brukes til å la gjeldende tråd frigjøre låsen og vente til en annen tråd påkaller notify eller notifyAll-metoden for objektet. Varslingsmetoden brukes til å vekke en enkelt tråd som venter på låsen. NotifyAll vekker alle tråder som venter på låsen.
Figur 02: Kalkulatorklasse
Figur 03: Hovedmetode
Kalkulator-klassen utvider tråden. Den synkroniserte blokken er inne i kjøremetoden. For loop and notify-metoden er inne i den synkroniserte blokken. Inne i hovedmetoden blir det opprettet en forekomst av en tråd, og startmetoden kalles på den forekomsten. Hovedmetoden vil vente til tråden gir et varsel. Når du kjører programmet, venter hovedmetoden til hele utførelsen av kjøremetoden og venter på varslingsmetoden. Når varslingsmetoden er k alt, slutter hovedmetoden å vente og begynner å kjøre resten av koden. Main venter til kalkulatortråden er fullført. Til slutt skrives resultatet av summen ut.
Hvis det ikke er noen synkronisert blokk og hvis hovedmetoden har en kode som nedenfor, vil den gi utgangen som null fordi den ikke venter på at den andre tråden skal fullføres.
Kalkulator t1=ny kalkulator ();
t1. start ();
System.out.println (t1.sum);
Hva er likheten mellom søvn og venting i Java?
Både søvn og venting er metoder som kan brukes ved implementering av multithreading i Java
Hva er forskjellen mellom søvn og venting i Java?
søvn vs vente i Java |
|
Søvnmetoden fører til at den gjeldende tråden suspenderer kjøringen i det angitte antallet millisekunder, med forbehold om presisjonen og nøyaktigheten til systemtidtakere og planleggere. | Ventemetoden får den gjeldende tråden til å vente til en annen tråd påkaller notify eller notifyAll-metoden for objektet. |
Tilknytning til lås | |
Søvnmetoden frigjør ikke låsen på et objekt under synkronisering. | Ventemetoden frigjør låsen under synkronisering. |
Utførelsesmetode | |
Søvnmetoden utføres på gjeldende tråd. | Ventemetoden kalles på objektet. |
Associated Class | |
Søvnen er en metode for trådklasse. | Venten er en metode i objektklassen. |
Fullføring | |
Søvnprosessen er fullført etter at den angitte tiden er over. | Ventemetoden avbrytes ved å ringe varslings- eller varsleAlle-metodene. |
Summary – sleep vs wait in Java
Det er flere prosesser som kjører på operativsystemet. Hver prosess kan ha flere tråder. En tråd er den minste behandlingsenheten i et operativsystem. Java programmeringsspråk støtter multithreading. Det lar deg kjøre flere tråder samtidig. Søvn og vent er to metoder som kan brukes når du implementerer multi-threading. Forskjellen mellom dvale og vente i Java er at dvalen brukes til å suspendere utførelsen av den gjeldende tråden i det angitte antall millisekunder mens ventemetoden brukes til å få den gjeldende tråden til å vente til en annen tråd påkaller notify eller notifyAll metode for objektet.