Sleutelverskil – slaap vs wag in Java
Slaap en wag is twee metodes wat gebruik word vir multithreading in Java. Die slaapmetode behoort aan Thread-klas terwyl die wagmetode van die Object-klas is. Die belangrikste verskil tussen slaap en wag in Java is dat die slaap gebruik word om die uitvoering van die huidige draad vir die gespesifiseerde aantal millisekondes op te skort terwyl die wagmetode gebruik word om die huidige draad te laat wag totdat 'n ander draad die kennisgewing of notifyAll-metode vir die voorwerp.
'n Draad is die kleinste verwerkingseenheid in die bedryfstelsel. Dit is 'n enkele opeenvolgende vloei van beheer binne 'n program. Drade is liggewig. Multithreading is die meganisme om verskeie drade op dieselfde tyd te laat loop. Programmeringstale soos Java ondersteun multithreading. Multithreading het voordele omdat dit dit moontlik maak om verskeie drade gelyktydig te laat loop en die drade is onafhanklik van mekaar. Daar is metodes in Java wat vir multithreading gebruik kan word. Twee van hulle slaap en wag.
Wat is slaap in Java?
Daar is verskeie prosesse wat in 'n bedryfstelsel loop. 'n Proses is 'n program wat uitgevoer word. Elke proses kan veelvuldige drade hê, en daar is 'n kontekswisseling wat tussen hierdie drade plaasvind. In Java is daar twee maniere om 'n draad te skep. Dit is deur die draadklas uit te brei of deur Runnable-koppelvlak te implementeer. Die Thread-klas het konstruktors en metodes om bewerkings op 'n draad te skep en uit te voer. Die Thread-klas brei die objekklas uit en implementeer Runnable-koppelvlak. Die Runnable-koppelvlak moet geïmplementeer word deur enige klas waarvan die gevalle bedoel is om deur 'n draad uitgevoer te word. Wanneer die draad uitgevoer word, word die kode wat moet uitgevoer word binne die hardloopmetode geskryf. Die draad wat moet loop, word deur die draadskeduleerder gekies. Slegs een draad loop in 'n enkele proses.
'n Draad gaan deur verskeie fases. Nadat 'n voorwerp van Thread-klas geskep is, kan die programmeerder die beginmetode aanroep. Voordat u daardie metode gebruik, word gesê dat die draad in die nuwe toestand is. Die draadskeduleerder kies 'n draad om te loop. As die draad nog nie deur die draadskeduleerder gekies is nie, maar as die beginmetode aangeroep word, is die draad in 'n loopbare toestand. Nadat draadskeduleerder die draad gekies het om uit te voer, gaan dit oor na lopende toestand. As die draad lewendig is, maar nie tans in aanmerking kom om te loop nie, is dit in 'n nie-loopbare of geblokkeerde toestand. Na die voltooiing van die hardloopmetode gaan die draad na die beëindigde toestand. Dit is die hooffases van die draadlewensiklus.
Daar is verskeie metodes beskikbaar in die draadklas om verskillende take uit te voer. Die slaapmetode word gebruik om die metode vir 'n spesifieke tyd te slaap. Die sintaksis vir die slaap metode is openbare leemte slaap (lang millisekondes) gooi InterruptedException. Dit veroorsaak dat die draad wat tans uitgevoer word, die uitvoering tydelik stop vir 'n gespesifiseerde aantal millisekondes. As 'n ander draad die huidige draad onderbreek, word die onderbreekstatus van die huidige draad uitgevee wanneer hierdie uitsondering gegooi word.
Figuur 01: Java-program met slaapmetode
Volgens bogenoemde program bevat die hardloopmetode kode wat uitgevoer moet word. In die hoofprogram word twee voorwerpe van die VoorbeeldThread1 geskep, en die beginmetodes word daarop aangeroep. Dit sal toelaat om die kode binne die hardloopmetode uit te voer. Slegs een draad word op 'n slag uitgevoer. Met die draad.slaap (1000); sal die eerste draad toelaat om die uitvoering vir 1000 millisekondes te beëindig. Wanneer 'n draad slaap, tel die draadskeduleerder die ander draad op.
Wat is wag in Java?
Verskeie drade kan dalk toegang tot 'n gedeelde hulpbron kry. Dit kan veroorsaak dat 'n verkeerde uitset gegenereer word. Draadsinchronisasie kan gebruik word om slegs een draad te maak om toegang tot die gedeelde hulpbron te verkry. Veronderstel 'n situasie soos volg. As daar twee drade soos t1 en t2 is, begin t1 waardes stoor in 'n tekslêer genaamd Text1.txt. Daardie waardes sal vir 'n ander berekening gebruik word wanneer t1 terugkeer. As t2 begin voor t1 terugkeer, kan t2 die waardes wat deur t1 gestoor is, verander. Dit kan veroorsaak dat t1 'n verkeerde uitset verskaf. Met behulp van sinchronisasie, wanneer t1 die Text1.txt-lêer begin gebruik, kan daardie lêer gesluit word, sodat dit slegs deur t1 toeganklik is. Die t2 kan dit nie verander voordat t1 die slot loslaat om toegang tot daardie tekslêer te kry nie. Wanneer die taak voltooi is, kan die t1 die slot losmaak. Die slot staan ook bekend as die monitor.
Draadsinchronisasie kan bereik word deur inter-draad kommunikasie. 'n Kritieke afdeling is 'n kodesegment wat toegang tot die gedeelde hulpbronne verkry. In die inter-draad kommunikasie, word 'n draad onderbreek wat in sy kritieke afdeling loop, en 'n ander draad word toegelaat om in dieselfde kritieke afdeling in te gaan om uitgevoer te word. Dit word geïmplementeer met behulp van wag, stel in kennis en stel alle metodes in kennis. Hulle behoort aan die Object-klas. Die wag-metode word gebruik om die huidige draad toe te laat om die slot los te maak en te wag totdat 'n ander draad die notify or notifyAll-metode vir die voorwerp oproep. Die kennisgewingmetode word gebruik om 'n enkele draad wakker te maak wat op die slot wag. Die notifyAll maak alle drade wat op die slot wag wakker.
Figuur 02: Sakrekenaarklas
Figuur 03: Hoofmetode
Die sakrekenaarklas brei die draad uit. Die gesinchroniseerde blok is binne die hardloopmetode. Die vir-lus-en-kennisgewing-metode is binne die gesinchroniseerde blok. Binne die hoofmetode word 'n instansie van 'n draad geskep en die beginmetode word op daardie instansie geroep. Die hoofmetode sal wag totdat die draad 'n kennisgewing gee. Wanneer die program uitgevoer word, wag die hoofmetode tot die hele uitvoering van die hardloopmetode en wag vir die kennisgewingmetode. Sodra die kennisgewingmetode geroep is, hou die hoofmetode op om te wag en begin die res van die kode uitvoer. Main wag totdat die sakrekenaardraad voltooi is. Laastens word die resultaat van die som gedruk.
As daar geen gesinchroniseerde blok is nie en as die hoofmetode 'n kode soos hieronder het, sal dit die uitvoer as nul gee omdat dit nie wag vir die ander draad om te voltooi nie.
sakrekenaar t1=nuwe sakrekenaar ();
t1. begin ();
System.out.println (t1.sum);
Wat is die ooreenkoms tussen slaap en wag in Java?
Beide slaap en wag is metodes wat gebruik kan word wanneer multithreading in Java geïmplementeer word
Wat is die verskil tussen slaap en wag in Java?
slaap vs wag in Java |
|
Die slaapmetode veroorsaak dat die huidige draad uitvoering vir die gespesifiseerde aantal millisekondes opskort, onderhewig aan die akkuraatheid en akkuraatheid van stelselaftellers en -skeduleerders. | Die wag-metode laat die huidige draad wag totdat 'n ander draad die notify or notifyAll-metode vir die objek oproep. |
Assosiasie met Slot | |
Die slaapmetode maak nie die slot op 'n voorwerp vry tydens sinchronisasie nie. | Die wagmetode maak die slot vry tydens sinchronisasie. |
Metode van uitvoering | |
Die slaapmetode word op die huidige draad uitgevoer. | Die wagmetode word op die voorwerp geroep. |
Geassosieerde klas | |
Die slaap is 'n metode van Thread-klas. | Die wag is 'n metode van objekklas. |
Voltooiing | |
Die slaapproses is voltooi nadat die gespesifiseerde tyd verby is. | Die wagmetode word onderbreek deur die Notify or notifyAll-metodes te bel. |
Opsomming – slaap vs wag in Java
Daar is verskeie prosesse wat op die bedryfstelsel loop. Elke proses kan veelvuldige drade hê. 'n Draad is die kleinste verwerkingseenheid in 'n bedryfstelsel. Java-programmeertaal ondersteun multithreading. Dit laat toe om verskeie drade gelyktydig te laat loop. Die slaap en wag is twee metodes wat gebruik kan word wanneer multi-threading geïmplementeer word. Die verskil tussen slaap en wag in Java is dat die slaap gebruik word om die uitvoering van die huidige draad vir die gespesifiseerde aantal millisekondes op te skort terwyl die wag metode gebruik word om die huidige draad te laat wag totdat 'n ander draad die notify or notifyAll oproep metode vir die voorwerp.