Søvn og vent er to metoder, der bruges til multitrådning i Java. Dvalemetoden tilhører trådklasse, mens ventemetoden er fra objektklassen. Det vigtigste forskel mellem søvn og vent i Java er det, sleep bruges til at suspendere udførelsen af den aktuelle tråd for det specificerede antal millisekunder, mens ventemetoden bruges til at få den aktuelle tråd til at vente, indtil en anden tråd påkalder underretningen eller meddelelseAlle metoden for objektet.
En tråd er den mindste behandlingsenhed i operativsystemet. Det er en enkelt sekventiel strøm af kontrol inden for et program. Tråde er lette. Multithreading er mekanismen til at køre flere tråde på samme tid. Programmeringssprog som Java understøtter multithreading. Multitrådning har fordele, fordi det giver mulighed for at køre flere tråde samtidigt, og trådene er uafhængige af hinanden. Der er metoder i Java, der kan bruges til multithreading. To af dem sover og venter.
1. Oversigt og nøgleforskel
2. Hvad er søvn i Java
3. Hvad venter man i Java
4. Ligheder mellem søvn og vent i Java
5. Sammenligning side ved side - søvn vs vent i Java i tabelform
6. Resume
Der er flere processer, der kører i et operativsystem. En proces er et program i udførelse. Hver proces kan have flere tråde, og der er en kontekstskift, der forekommer mellem disse tråde. I Java er der to måder at oprette en tråd på. Det er ved at udvide trådklassen eller ved at implementere Runnable interface. Trådklassen har konstruktører og metoder til at oprette og udføre operationer på en tråd. Trådklassen udvider objektklasse og implementerer Runnable interface. Det Runnable-interface skal implementeres af enhver klasse, hvis tilfælde er beregnet til at blive udført med en tråd. Når tråden udføres, skrives den kode, der skal udføres, inden for køremetoden. Tråden, der skal køres, vælges af trådplanlæggeren. Kun en tråd kører i en enkelt proces.
En tråd går gennem flere faser. Efter oprettelse af et objekt fra trådklassen, kan programmereren påkalde startmetoden. Inden der påberåbes denne metode, siges tråden at være i den nye tilstand. Trådplanlæggeren vælger en tråd, der skal køres. Hvis tråden endnu ikke er valgt af trådplanlæggeren, men hvis startmetoden aktiveres, er tråden i en kørbar tilstand. Når trådplanlæggeren har valgt den tråd, der skal udføres, overføres den til kørselstilstand. Hvis tråden er i live, men ikke i øjeblikket er berettiget til at køre, er den i ikke-kørbar eller blokeret tilstand. Efter afslutningen af køremetoden går tråden til den afsluttede tilstand. Det er de vigtigste faser i trådens livscyklus.
Der er forskellige metoder i trådklassen til at udføre forskellige opgaver. Søvnmetoden bruges til at sove metoden i en bestemt tidsperiode. Syntaks for søvnmetoden er offentlig ugyldig søvn (lange millisekunder) kaster InterruptException. Det får den aktuelle eksekverende tråd til at stoppe udførelsen midlertidigt i et specificeret antal millisekunder. Hvis en anden tråd afbryder den aktuelle tråd, slettes den aktuelle afbrydes status, når denne undtagelse kastes.
Figur 01: Java-program med sleep-metode
I henhold til ovenstående program indeholder køremetoden kode, der skal udføres. I hovedprogrammet oprettes to objekter i ExampleThread1, og startmetoderne aktiveres på dem. Det giver mulighed for at køre koden inden for køremetoden. Kun en tråd køres ad gangen. Med tråden. søvn (1000); tillader den første tråd at afslutte udførelsen i 1000 millisekunder. Når en tråd sover, henter trådplanlæggeren den anden tråd.
Flere tråde har muligvis adgang til en delt ressource. Det kan medføre, at der genereres en forkert output. Trådsynkronisering kan bruges til kun at oprette en tråd for at få adgang til den delte ressource. Antag en situation som følger. Hvis der er to tråde som t1 og t2, begynder t1 at gemme værdier i en tekstfil kaldet Text1.txt. Disse værdier vil blive brugt til en anden beregning, når t1 vender tilbage. Hvis t2 starter, før t1 vender tilbage, kan t2 ændre de værdier, der er gemt af t1. Dette kan få t1 til at give en forkert output. Når t1 begynder at bruge Text1.txt-filen, kan denne fil låses, så den er kun tilgængelig med t1. T2 kan ikke ændre den, før t1 frigiver låsen for at få adgang til den tekstfil. Når opgaven er afsluttet, kan t1 frigøre låsen. Låsen er også kendt som skærmen.
Trådsynkronisering kan opnås ved kommunikation mellem trådene. Et kritisk afsnit er et kodesegment, der får adgang til de delte ressourcer. I kommunikationen mellem tråden pauses en tråd, der kører i det kritiske afsnit, og en anden tråd får lov til at komme ind i det samme kritiske afsnit, der skal udføres. Det implementeres ved hjælp af vent, besked og meddelelse om alle metoder. De hører til Objekt-klassen. Ventemetoden bruges til at lade den aktuelle tråd frigøre låsen og vente, indtil en anden tråd påkalder besked eller meddelelseAlle metoden for objektet. Underretningsmetoden bruges til at vække en enkelt tråd, der venter på låsen. MeddelelsenAlle vækker alle tråde, der venter på låsen.
Figur 02: Lommeregner klasse
Figur 03: Hovedmetode
Lommeregnerklassen udvider tråden. Den synkroniserede blok er inde i køremetoden. Metoden for loop og notify er inden i den synkroniserede blok. Inde i hovedmetoden kaldes en forekomst af en tråd, der oprettes, og startmetoden på den instans. Hovedmetoden vil vente til tråden giver besked. Når du udfører programmet, venter hovedmetoden indtil hele udførelsen af køremetoden og venter på underretningsmetoden. Når meddelelsesmetoden kaldes, stopper hovedmetoden med at vente og begynder at udføre resten af koden. Hoved venter, indtil regnemøtråden er færdig. Endelig udskrives resultatet af summen.
Hvis der ikke er nogen synkroniseret blok, og hvis hovedmetoden har en kode som nedenfor, giver den output som nul, fordi den ikke venter på, at den anden tråd skal afsluttes.
Lommeregner t1 = ny lommeregner ();
t1. Start ();
System.out.println (t1.sum);
søvn vs vent i Java | |
Dvale-metoden får den aktuelle tråd til at suspendere udførelsen for det specificerede antal millisekunder, afhængigt af nøjagtigheden og nøjagtigheden af systemtimere og -planlægere. | Ventemetoden får den aktuelle tråd til at vente, indtil en anden tråd påkalder meddelelses- eller meddelelsesAlle-metoden for objektet. |
Forening med lås | |
Dvalemetoden frigiver ikke låsen på et objekt under synkronisering. | Ventemetoden frigiver låsen under synkronisering. |
Udførelsesmetode | |
Dvalemetoden udføres på den aktuelle tråd. | Ventemetoden kaldes på objektet. |
Associated Class | |
Søvnen er en metode til trådklasse. | Ventetiden er en metode til Objektklasse. |
Færdiggørelse | |
Søvnprocessen er afsluttet efter den angivne tidsperiode. | Ventemetoden afbrydes ved at kalde underretnings- eller meddelelsesAlle-metoderne. |
Der er flere processer, der kører på operativsystemet. Hver proces kan have flere tråde. En tråd er den mindste behandlingsenhed i et operativsystem. Java-programmeringssprog understøtter multithreading. Det giver mulighed for at køre flere tråde samtidigt. Søvn og vent er to metoder, der kan bruges, når man implementerer multi-thread. Forskellen mellem søvn og vent i Java er, at søvnen bruges til at suspendere udførelsen af den aktuelle tråd for det specificerede antal millisekunder, mens ventemetoden bruges til at få den aktuelle tråd til at vente, indtil en anden tråd påkalder underretningen eller giver besked metode til objektet.
1. "Kommunikation mellem trådtråd i Java - Javatpoint.". JavaTPoint. Tilgængelig her
2. Intertråd Kommunikation i Java Multithreading | Core Java-tutorial | Studytonight. Tilgængelig her