Key Difference – sömn vs vänta i Java
Sov och vänta är två metoder som används för multitrådning i Java. Sleep-metoden tillhör Thread-klassen medan wait-metoden är från Object-klassen. Den viktigaste skillnaden mellan vila och vänta i Java är att viloläget används för att avbryta exekveringen av den aktuella tråden under det angivna antalet millisekunder medan väntemetoden används för att få den aktuella tråden att vänta tills en annan tråd anropar meddelandet eller notifyAll-metod för objektet.
En tråd är den minsta bearbetningsenheten i operativsystemet. Det är ett enda sekventiellt kontrollflöde inom ett program. Trådarna är lätta. Multithreading är mekanismen för att köra flera trådar samtidigt. Programmeringsspråk som Java stöder multithreading. Multithreading har fördelar eftersom det gör det möjligt att köra flera trådar samtidigt och trådarna är oberoende av varandra. Det finns metoder i Java som kan användas för multithreading. Två av dem sover och väntar.
Vad är sömn i Java?
Det finns flera processer som körs i ett operativsystem. En process är ett program som körs. Varje process kan ha flera trådar, och det sker en kontextväxling mellan dessa trådar. I Java finns det två sätt att skapa en tråd. Det är genom att utöka trådklassen eller genom att implementera Runnable-gränssnitt. Klassen Thread har konstruktorer och metoder för att skapa och utföra operationer på en tråd. Thread-klassen utökar objektklassen och implementerar Runnable-gränssnitt. Det körbara gränssnittet bör implementeras av alla klasser vars instanser är avsedda att exekveras av en tråd. När tråden körs skrivs koden som ska köras in i körmetoden. Tråden som ska köras väljs av trådschemaläggaren. Endast en tråd körs i en enda process.
En tråd går igenom flera faser. Efter att ha skapat ett objekt av klassen Thread kan programmeraren anropa startmetoden. Innan man åberopar den metoden sägs tråden vara i det nya tillståndet. Trådschemaläggaren väljer en tråd att köra. Om tråden ännu inte är vald av trådschemaläggaren men om startmetoden anropas, är tråden i ett körbart tillstånd. Efter att trådschemaläggaren har v alt den tråd som ska köras, övergår den till körläge. Om tråden är vid liv men för närvarande inte är kvalificerad att köras, är den i tillstånd som inte kan köras eller blockeras. Efter slutförandet av körmetoden går tråden till det avslutade tillståndet. Det är huvudfaserna i trådens livscykel.
Det finns olika metoder tillgängliga i trådklassen för att utföra olika uppgifter. Sömnmetoden används för att sova metoden under en viss tid. Syntaxen för sömnmetoden är public void sleep (långa millisekunder) kastar InterruptedException. Det gör att den körande tråden stoppar körningen tillfälligt under ett specificerat antal millisekunder. Om en annan tråd avbryter den aktuella tråden, rensas den avbrutna statusen för den aktuella tråden när detta undantag kastas.
Figur 01: Java-program med sömnmetod
Enligt ovanstående program innehåller körmetoden kod som bör exekveras. I huvudprogrammet skapas två objekt i ExempelThread1, och startmetoderna anropas på dem. Det gör det möjligt att köra koden i körmetoden. Endast en tråd körs åt gången. Med tråden.sömn (1000); kommer att tillåta den första tråden att avsluta exekveringen i 1000 millisekunder. När en tråd ligger i viloläge, tar trådschemaläggaren upp den andra tråden.
Vad är wait i Java?
Flera trådar kan komma åt en delad resurs. Det kan orsaka att en felaktig utdata genereras. Trådsynkronisering kan användas för att bara skapa en tråd för att komma åt den delade resursen. Antag en situation enligt följande. Om det finns två trådar som t1 och t2, börjar t1 att spara värden i en textfil som heter Text1.txt. Dessa värden kommer att användas för någon annan beräkning när t1 returnerar. Om t2 börjar innan t1 återvänder, kan t2 ändra värdena som sparas av t1. Detta kan göra att t1 ger en felaktig utgång. Med hjälp av synkronisering, när t1 börjar använda filen Text1.txt, kan den filen låsas, så den är endast tillgänglig för t1. t2 kan inte ändra det förrän t1 släpper låset för att komma åt den textfilen. När uppgiften är klar kan t1 släppa låset. Låset är även känt som monitorn.
Trådsynkronisering kan uppnås genom kommunikation mellan trådar. En kritisk sektion är ett kodsegment som får åtkomst till de delade resurserna. I kommunikationen mellan trådarna pausas en tråd som körs i dess kritiska sektion, och en annan tråd tillåts komma in i samma kritiska sektion för att exekveras. Det implementeras med metoderna vänta, meddela och meddela alla. De tillhör klassen Object. Väntametoden används för att tillåta den aktuella tråden att släppa låset och vänta tills en annan tråd anropar notify- eller notifyAll-metoden för objektet. Meddelandemetoden används för att väcka en enda tråd som väntar på låset. NotifyAll väcker alla trådar som väntar på låset.
Figur 02: Kalkylatorklass
Figur 03: Huvudmetod
Klassen Calculator förlänger tråden. Det synkroniserade blocket är inne i körmetoden. Metoden for loop and notify är inuti det synkroniserade blocket. Inuti huvudmetoden skapas en instans av en tråd och startmetoden anropas på den instansen. Huvudmetoden väntar tills tråden ger ett meddelande. När programmet körs väntar huvudmetoden tills hela körningsmetoden körs och väntar på meddelandemetoden. När meddelandemetoden anropas slutar huvudmetoden att vänta och börjar exekvera resten av koden. Main väntar tills kalkylatortråden är klar. Slutligen skrivs resultatet av summan ut.
Om det inte finns något synkroniserat block och om huvudmetoden har en kod enligt nedan, kommer den att ge utdata som noll eftersom den inte väntar på att den andra tråden ska slutföras.
Calculator t1=new Calculator ();
t1. start ();
System.out.println (t1.sum);
Vad är likheten mellan sömn och väntan i Java?
Både sömn och vänta är metoder som kan användas vid implementering av multithreading i Java
Vad är skillnaden mellan sömn och väntan i Java?
sömn kontra vänta i Java |
|
Sömnmetoden gör att den aktuella tråden avbryter exekveringen under det angivna antalet millisekunder, beroende på precisionen och noggrannheten hos systemtimer och schemaläggare. | Väntemetoden gör att den aktuella tråden väntar tills en annan tråd anropar metoden notify eller notifyAll för objektet. |
Association med lås | |
Sömnmetoden släpper inte låset på ett objekt under synkronisering. | Väntemetoden släpper låset under synkronisering. |
Utförandemetod | |
Sömnmetoden körs på den aktuella tråden. | Väntemetoden anropas på objektet. |
Associated Class | |
Sömnen är en metod i trådklass. | Väntan är en metod av objektklass. |
Completion | |
Sömnprocessen är klar efter att den angivna tidsperioden är över. | Väntemetoden avbryts genom att anropa notify or notifyAll-metoderna. |
Sammanfattning – sömn vs vänta i Java
Det finns flera processer som körs på operativsystemet. Varje process kan ha flera trådar. En tråd är den minsta bearbetningsenheten i ett operativsystem. Java programmeringsspråk stöder multithreading. Det tillåter körning av flera trådar samtidigt. Sömnen och väntan är två metoder som kan användas när man implementerar multi-threading. Skillnaden mellan vila och vänta i Java är att viloläget används för att avbryta exekveringen av den aktuella tråden under det angivna antalet millisekunder medan väntemetoden används för att få den aktuella tråden att vänta tills en annan tråd anropar notify eller notifyAll metod för objektet.