Belangrijk verschil - slapen versus wachten in Java
Slaap en wacht zijn twee methoden die worden gebruikt voor multithreading in Java. De sleep-methode behoort tot de klasse Thread, terwijl de wait-methode van de klasse Object is. Het belangrijkste verschil tussen slaap en wacht in Java is dat de slaap wordt gebruikt om de uitvoering van de huidige thread gedurende het opgegeven aantal milliseconden op te schorten, terwijl de wachtmethode wordt gebruikt om de huidige thread te laten wachten totdat een andere thread de melding of notifyAll methode voor het object.
Een thread is de kleinste verwerkingseenheid in het besturingssysteem. Het is een enkele sequentiële controlestroom binnen een programma. Draden zijn lichtgewicht. Multithreading is het mechanisme waarbij meerdere threads tegelijkertijd worden uitgevoerd. Programmeertalen zoals Java ondersteunen multithreading. Multithreading heeft voordelen omdat het de mogelijkheid biedt om meerdere threads tegelijk te draaien en de threads onafhankelijk van elkaar zijn. Er zijn methoden in Java die kunnen worden gebruikt voor multithreading. Twee van hen zijn slapen en wachten.
Wat is slapen op Java?
Er zijn meerdere processen actief in een besturingssysteem. Een proces is een programma in uitvoering. Elk proces kan meerdere threads hebben en er vindt een contextwisseling plaats tussen deze threads. In Java zijn er twee manieren om een thread te maken. Dat wil zeggen door de threadklasse uit te breiden of door de Runnable-interface te implementeren. De klasse Thread heeft constructors en methoden om bewerkingen op een thread te maken en uit te voeren. De Thread-klasse breidt de Object-klasse uit en implementeert de Runnable-interface. De Runnable-interface moet worden geïmplementeerd door elke klasse waarvan de instanties bedoeld zijn om door een thread te worden uitgevoerd. Wanneer de thread wordt uitgevoerd, wordt de code die moet worden uitgevoerd, in de run-methode geschreven. De thread die moet worden uitgevoerd, wordt geselecteerd door de threadplanner. Slechts één thread wordt uitgevoerd in een enkel proces.
Een draad doorloopt verschillende fasen. Nadat een object van de klasse Thread is gemaakt, kan de programmeur de startmethode aanroepen. Voordat die methode wordt aangeroepen, wordt gezegd dat de thread zich in de nieuwe staat bevindt. De thread-planner selecteert een thread om uit te voeren. Als de thread nog niet is geselecteerd door de threadplanner, maar als de startmethode wordt aangeroepen, bevindt de thread zich in een uitvoerbare staat. Nadat de threadplanner de uit te voeren thread heeft geselecteerd, gaat deze over naar de actieve status. Als de thread actief is maar momenteel niet kan worden uitgevoerd, bevindt deze zich in de niet-uitvoerbare of geblokkeerde status. Na voltooiing van de run-methode gaat de thread naar de beëindigde status. Dat zijn de belangrijkste fasen van de levenscyclus van de draad.
Er zijn verschillende methoden beschikbaar in de threadklasse om verschillende taken uit te voeren. De slaapmethode wordt gebruikt om de methode voor een bepaalde tijd te laten slapen. De syntaxis voor de slaapmethode is public void sleep (lange milliseconden) throws InterruptedException. Het zorgt ervoor dat de thread die momenteel wordt uitgevoerd, de uitvoering tijdelijk stopt voor een bepaald aantal milliseconden. Als een andere thread de huidige thread onderbreekt, wordt de onderbroken status van de huidige thread gewist wanneer deze uitzondering wordt gegenereerd.
Figuur 01: Java-programma met slaapmethode
Volgens het bovenstaande programma bevat de run-methode code die moet worden uitgevoerd. In het hoofdprogramma worden twee objecten van de VoorbeeldThread1 gemaakt en de startmethoden worden daarop aangeroepen. Dat maakt het mogelijk om de code binnen de run-methode uit te voeren. Er wordt slechts één thread tegelijk uitgevoerd. Met de draad.slaap (1000); staat de eerste thread toe om de uitvoering gedurende 1000 milliseconden te beëindigen. Wanneer een thread slaapt, pikt de threadplanner de andere thread op.
Wat is wachten in Java?
Meerdere discussielijnen hebben mogelijk toegang tot een gedeelde bron. Het kan ertoe leiden dat er een onjuiste uitvoer wordt gegenereerd. Thread-synchronisatie kan worden gebruikt om slechts één thread te maken voor toegang tot de gedeelde bron. Stel een situatie als volgt. Als er twee threads zijn als t1 en t2, begint t1 met het opslaan van waarden in een tekstbestand met de naam Text1.txt. Die waarden worden gebruikt voor een andere berekening wanneer t1 terugkeert. Als t2 begint voordat t1 terugkeert, kan t2 de door t1 opgeslagen waarden wijzigen. Dit kan ertoe leiden dat t1 een verkeerde uitvoer levert. Met behulp van synchronisatie, wanneer t1 het Text1.txt-bestand begint te gebruiken, kan dat bestand worden vergrendeld, zodat het alleen toegankelijk is voor t1. De t2 kan het niet wijzigen totdat t1 de vergrendeling opheft om toegang te krijgen tot dat tekstbestand. Wanneer de taak is voltooid, kan de t1 het slot ontgrendelen. Het slot wordt ook wel de monitor genoemd.
Draadsynchronisatie kan worden bereikt door communicatie tussen threads. Een kritieke sectie is een codesegment dat toegang heeft tot de gedeelde bronnen. In de communicatie tussen threads wordt een thread gepauzeerd in zijn kritieke sectie en mag een andere thread in dezelfde kritieke sectie worden uitgevoerd om te worden uitgevoerd. Het wordt geïmplementeerd met behulp van de methoden wachten, informeren en informeren. Ze behoren tot de klasse Object. De wait-methode wordt gebruikt om de huidige thread de vergrendeling te laten vrijgeven en te wachten tot een andere thread de methode 'notificeren' of 'notifyAll' voor het object aanroept. De meldingsmethode wordt gebruikt om een enkele thread te activeren die wacht op de vergrendeling. De meldingAlles wekt alle threads die wachten op het slot.
Figuur 02: Calculatorklasse
Figuur 03: Hoofdmethode
De klasse Calculator breidt de Thread uit. Het gesynchroniseerde blok bevindt zich in de run-methode. De for-lus- en notificatiemethode bevindt zich in het gesynchroniseerde blok. Binnen de hoofdmethode wordt een instantie van een thread gemaakt en wordt de startmethode op die instantie aangeroepen. De hoofdmethode wacht tot de thread een melding geeft. Bij het uitvoeren van het programma wacht de hoofdmethode tot de volledige uitvoering van de run-methode en wacht op de notificatiemethode. Zodra de meldingsmethode is aangeroepen, stopt de hoofdmethode met wachten en begint de rest van de code uit te voeren. Main wacht tot de Calculator-thread is voltooid. Ten slotte wordt het resultaat van de som afgedrukt.
Als er geen gesynchroniseerd blok is en als de hoofdmethode een code heeft zoals hieronder, zal het de output als nul geven omdat het niet wacht tot de andere thread is voltooid.
Rekenmachine t1=nieuwe rekenmachine ();
t1. begin ();
Systeem.uit.println (t1.som);
Wat is de overeenkomst tussen slapen en wachten in Java?
Zowel sleep als wait zijn methoden die kunnen worden gebruikt bij het implementeren van multithreading in Java
Wat is het verschil tussen slapen en wachten in Java?
slaap vs wachten in Java |
|
De slaapmethode zorgt ervoor dat de huidige thread de uitvoering voor het opgegeven aantal milliseconden opschort, afhankelijk van de precisie en nauwkeurigheid van systeemtimers en planners. | De wait-methode zorgt ervoor dat de huidige thread wacht totdat een andere thread de methode 'notify' of 'notifyAll' voor het object aanroept. |
Associatie met slot | |
De slaapmethode geeft de vergrendeling van een object niet vrij tijdens de synchronisatie. | De wachtmethode ontgrendelt de vergrendeling tijdens de synchronisatie. |
Uitvoeringsmethode | |
De slaapmethode wordt uitgevoerd op de huidige thread. | De wait-methode wordt aangeroepen op het object. |
Bijbehorende klas | |
De sleep is een methode van de Thread-klasse. | Het wachten is een methode van de Object-klasse. |
Voltooiing | |
Het slaapproces is voltooid nadat de opgegeven tijd voorbij is. | De wachtmethode wordt onderbroken door de methode 'notificeren' of 'alles informeren' aan te roepen. |
Samenvatting – slapen versus wachten in Java
Er zijn meerdere processen actief op het besturingssysteem. Elk proces kan meerdere threads hebben. Een thread is de kleinste verwerkingseenheid in een besturingssysteem. Java-programmeertaal ondersteunt multithreading. Hiermee kunnen meerdere threads tegelijk worden uitgevoerd. Sleep en wait zijn twee methoden die kunnen worden gebruikt bij het implementeren van multi-threading. Het verschil tussen slaap en wacht in Java is dat de slaap wordt gebruikt om de uitvoering van de huidige thread gedurende het opgegeven aantal milliseconden op te schorten, terwijl de wachtmethode wordt gebruikt om de huidige thread te laten wachten totdat een andere thread de melding of meldingAlles aanroept methode voor het object.