Sleep and wait zijn twee methoden die worden gebruikt voor multithreading in Java. De slaapmethode behoort tot de Thread-klasse, terwijl de wacht-methode uit de klasse Object komt. De belangrijk verschil tussen slapen en wachten op Java is dat, het 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 tot een andere thread de methode notify of notifyAll voor het object aanroept.
Een thread is de kleinste verwerkingseenheid in het besturingssysteem. Het is een enkele opeenvolgende controlestroom binnen een programma. Draden zijn lichtgewicht. Multithreading is het mechanisme om meerdere threads tegelijk te gebruiken. Programmeertalen zoals Java ondersteunen multithreading. Multithreading heeft voordelen omdat het meerdere threads tegelijk kan uitvoeren 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.
1. Overzicht en belangrijkste verschil
2. Wat is slapen op Java
3. Wat is wachten in Java
4. Overeenkomsten Tussen slapen en wachten op Java
5. Side-by-side vergelijking - slaap versus wacht in Java in tabelvorm
6. Samenvatting
Er zijn meerdere processen actief in een besturingssysteem. Een proces is een programma in uitvoering. Elk proces kan meerdere threads hebben en er is een contextomschakeling tussen deze threads. In Java zijn er twee manieren om een thread te maken. Dat is door de threadklasse uit te breiden of door een Runnable-interface te implementeren. De Thread-klasse heeft constructors en methoden om bewerkingen op een thread te maken en uit te voeren. De Thread-klasse breidt Objectklasse uit en implementeert een bruikbare interface. De interface Runnable moet worden geïmplementeerd door elke klasse waarvan de exemplaren zijn bedoeld om te worden uitgevoerd door een thread. Wanneer de thread wordt uitgevoerd, wordt de code die moet worden uitgevoerd, geschreven in de run-methode. De thread die moet worden uitgevoerd, wordt geselecteerd door de threadplanner. Slechts één thread wordt in één proces uitgevoerd.
Een thread doorloopt verschillende fasen. Nadat een object in de Thread-klasse is gemaakt, kan de programmeur de startmethode gebruiken. Voordat u die methode oproept, wordt gezegd dat de thread zich in de nieuwe staat bevindt. De threadplanner selecteert een thread die moet worden uitgevoerd. Als de thread nog niet is geselecteerd door de thread-planner, maar als de startmethode wordt aangeroepen, is de thread in een uitvoerbare staat. Nadat de thread-planner de thread heeft geselecteerd die moet worden uitgevoerd, wordt deze doorgeschakeld naar de actieve status. Als de thread nog in leven is maar momenteel niet in aanmerking komt om te worden uitgevoerd, is deze in niet-actieve of geblokkeerde status. Nadat de run-methode is voltooid, gaat de thread naar de beëindigde status. Dat zijn de belangrijkste fasen van de levenscyclus van threads.
Er zijn verschillende methoden beschikbaar in de threadklasse om verschillende taken uit te voeren. De slaapmethode wordt gebruikt om de methode gedurende een bepaalde tijd te slapen. De syntaxis voor de slaapmethode is public void sleep (lange milliseconden) gooit InterruptedException. Het zorgt ervoor dat de momenteel uitgevoerde thread 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 ExampleThread1 gemaakt en worden de startmethoden erop aangeroepen. Dat staat toe om de code binnen de run-methode uit te voeren. Slechts één thread wordt tegelijkertijd uitgevoerd. Met de draad. slaap (1000); staat de eerste thread toe om de uitvoering voor 1000 milliseconden te beëindigen. Wanneer een draad slaapt, neemt de thread scheduler de andere thread op.
Meerdere threads hebben mogelijk toegang tot een gedeelde bron. Dit kan een onjuiste uitvoer veroorzaken. Thread-synchronisatie kan worden gebruikt om slechts één thread te maken om toegang te krijgen tot de gedeelde bron. Ga uit van 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. Deze 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 via t1 toegankelijk is. De t2 kan dit niet veranderen totdat t1 het slot vrijgeeft voor toegang tot dat tekstbestand. Wanneer de taak is voltooid, kan de t1 de vergrendeling opheffen. Het slot is ook bekend als de monitor.
Thread-synchronisatie kan worden bereikt door inter-thread communicatie. Een kritieke sectie is een codesegment dat toegang geeft tot de gedeelde bronnen. In de inter-threadcommunicatie wordt een thread in de kritieke sectie gepauzeerd en kan een andere thread worden ingevoerd in dezelfde kritieke sectie die moet worden uitgevoerd. Het wordt geïmplementeerd met behulp van wait, notify en notifyAll-methoden. Ze behoren tot de klasse Object. De wachtmethode wordt gebruikt om de huidige thread toe te staan de vergrendeling op te heffen en te wachten totdat een andere thread de methode notify of notifyAll voor het object inroept. De notificatiemethode wordt gebruikt om een enkele thread wakker te maken die op het slot wacht. De notifyAll wekt alle threads op die op het slot wachten.
Figuur 02: Rekenmachineklasse
Figuur 03: Belangrijkste methode
De Calculator-klasse breidt de draad uit. Het gesynchroniseerde blok bevindt zich binnen de run-methode. De for-lus en kennisgevingsmethode bevindt zich in het gesynchroniseerde blok. Binnen de hoofdmethode wordt een exemplaar van een thread gemaakt en wordt de startmethode op dat exemplaar 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. Nadat de waarschuwingsmethode is aangeroepen, stopt de hoofdmethode met wachten en begint de rest van de code. Main wacht tot de thread van de Calculator 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, geeft het de uitvoer als nul omdat het niet wacht tot de andere thread voltooid is.
Rekenmachine t1 = nieuwe rekenmachine ();
t1. start ();
System.out.println (t1.sum);
slaap versus wacht in Java | |
De slaapmethode zorgt ervoor dat de huidige thread de uitvoering opschort voor het opgegeven aantal milliseconden, afhankelijk van de nauwkeurigheid en nauwkeurigheid van systeemtimers en -planners. | De wachtmethode zorgt ervoor dat de huidige thread wacht totdat een andere thread de notificatie of notifyAll-methode voor het object inroept. |
Associatie met Lock | |
De slaapmethode geeft het slot van een object tijdens synchronisatie niet vrij. | De wacht-methode geeft het slot vrij tijdens synchronisatie. |
Wijze van uitvoering | |
De slaapmethode wordt uitgevoerd op de huidige thread. | De wachtmethode wordt aangeroepen op het object. |
Associated Class | |
De slaap is een methode van de Thread-klasse. | Het wachten is een methode van Objectklasse. |
Voltooiing | |
Het slaapproces is voltooid nadat de opgegeven hoeveelheid tijd voorbij is. | De wachtmethode wordt onderbroken door de methoden notify of notifyAll aan te roepen. |
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 kunt u meerdere threads gelijktijdig uitvoeren. De slaap- en wachttijd 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 tot een andere thread de notify of notifyAll aanroept methode voor het object.
1. "Inter-thread communicatie in Java - Javatpoint.". JavaTPoint. Beschikbaar Hier
2. Inter Thread Communicatie in Java Multithreading | Core Java-zelfstudie | Studytonight. Beschikbaar Hier