Ključna razlika – spanje ali čakanje v Javi
Spanje in čakanje sta dve metodi, ki se uporabljata za večnitnost v Javi. Metoda spanja pripada razredu Thread, medtem ko je metoda čakanja iz razreda Object. Ključna razlika med spanjem in čakanjem v Javi je, da se spanje uporablja za prekinitev izvajanja trenutne niti za določeno število milisekund, medtem ko se metoda čakanja uporablja za povzročitev, da trenutna nit počaka, dokler druga nit ne prikliče obvestila ali metoda notifyAll za objekt.
Nit je najmanjša procesna enota v operacijskem sistemu. To je en sam zaporedni tok nadzora znotraj programa. Niti so lahke. Večnitnost je mehanizem izvajanja več niti hkrati. Programski jeziki, kot je Java, podpirajo večnitnost. Večnitnost ima prednosti, ker omogoča izvajanje več niti hkrati in so niti neodvisne druga od druge. V Javi obstajajo metode, ki jih je mogoče uporabiti za večnitnost. Dva od njih spita in čakata.
Kaj je spanje v Javi?
V operacijskem sistemu teče več procesov. Proces je program v izvajanju. Vsak proces ima lahko več niti in med temi nitmi prihaja do preklapljanja konteksta. V Javi obstajata dva načina za ustvarjanje niti. To je z razširitvijo razreda niti ali z implementacijo vmesnika Runnable. Razred Thread ima konstruktorje in metode za ustvarjanje in izvajanje operacij v niti. Razred Thread razširja razred Object in implementira vmesnik Runnable. Vmesnik Runnable bi moral implementirati vsak razred, katerega primerke naj bi izvajala nit. Ko se nit izvaja, je koda, ki naj se izvede, zapisana znotraj metode run. Nit, ki naj se izvaja, izbere razporejevalnik niti. Samo ena nit teče v enem procesu.
Nit gre skozi več faz. Po izdelavi predmeta razreda Thread lahko programer prikliče metodo start. Pred priklicem te metode naj bi bila nit v novem stanju. Razporejevalnik niti izbere nit za izvajanje. Če razporejevalnik niti še ni izbral niti, vendar je priklicana zagonska metoda, je nit v stanju, ki ga je mogoče izvajati. Ko razporejevalnik niti izbere nit za izvedbo, preide v stanje izvajanja. Če je nit živa, vendar trenutno ni primerna za izvajanje, je v stanju, ki ga ni mogoče izvajati ali je blokirano. Po zaključku run metode nit preide v prekinjeno stanje. To so glavne faze življenjskega cikla niti.
V razredu niti so na voljo različne metode za izvajanje različnih nalog. Metoda spanja se uporablja za prekinitev metode za določen čas. Sintaksa metode spanja je public void spanje (dolge milisekunde) vrže InterruptedException. Povzroči, da trenutno izvajajoča se nit začasno ustavi izvajanje za določeno število milisekund. Če druga nit prekine trenutno nit, se stanje prekinitve trenutne niti izbriše, ko je vržena ta izjema.
Slika 01: Program Java z metodo mirovanja
V skladu z zgornjim programom metoda zagona vsebuje kodo, ki jo je treba izvesti. V glavnem programu sta ustvarjena dva objekta PrimerThread1 in na njiju so priklicane metode zagona. To bo omogočilo zagon kode znotraj metode run. Naenkrat se izvaja samo ena nit. Z nitjo.spanje (1000); bo prvi niti omogočil, da prekine izvajanje za 1000 milisekund. Ko nit spi, razporejevalnik niti prevzame drugo nit.
Kaj je čakanje v Javi?
Več niti lahko dostopa do skupnega vira. Lahko povzroči napačen izhod. Sinhronizacijo niti je mogoče uporabiti, da samo ena nit dostopa do skupnega vira. Predpostavimo naslednjo situacijo. Če obstajata dve niti kot t1 in t2, začne t1 shranjevati vrednosti v besedilno datoteko z imenom Text1.txt. Te vrednosti bodo uporabljene za druge izračune, ko se vrne t1. Če se t2 začne pred vrnitvijo t1, lahko t2 spremeni vrednosti, ki jih shrani t1. To lahko povzroči napačen rezultat t1. S pomočjo sinhronizacije, ko t1 začne uporabljati datoteko Text1.txt, se ta datoteka lahko zaklene, tako da je dostopna samo t1. T2 je ne more spremeniti, dokler t1 ne sprosti ključavnice za dostop do te besedilne datoteke. Ko je naloga končana, lahko t1 sprosti ključavnico. Ključavnica je znana tudi kot monitor.
Sinhronizacijo niti je mogoče doseči s komunikacijo med nitmi. Kritični razdelek je segment kode, ki dostopa do skupnih virov. Pri komunikaciji med nitmi se nit začasno ustavi v svojem kritičnem odseku, drugi niti pa je dovoljeno vstopiti v isti kritični odsek, da se izvede. Implementiran je z metodami čakaj, obvesti in notifyAll. Spadajo v razred Object. Metoda čakanja se uporablja za omogočanje trenutni niti, da sprosti zaklepanje in počaka, dokler druga nit ne prikliče metode notify ali notifyAll za objekt. Metoda obvestila se uporablja za prebujanje posamezne niti, ki čaka na zaklepanje. NotifyAll prebudi vse niti, ki čakajo na zaklepanje.
Slika 02: Razred kalkulatorja
Slika 03: Glavna metoda
Razred Kalkulator razširja nit. Sinhronizirani blok je znotraj metode izvajanja. Zanka for in metoda obveščanja sta znotraj sinhroniziranega bloka. Znotraj glavne metode je ustvarjen primerek niti in na tem primerku je poklicana metoda zagona. Glavna metoda bo počakala, dokler nit ne pošlje obvestila. Pri izvajanju programa glavna metoda čaka do celotne izvedbe run metode in čaka na notify metodo. Ko se pokliče metoda notify, glavna metoda preneha čakati in začne izvajati preostalo kodo. Main čaka, da se zaključi nit kalkulatorja. Na koncu se izpiše rezultat vsote.
Če ni sinhroniziranega bloka in če ima glavna metoda kodo, kot je spodaj, bo podala izhod kot nič, ker ne čaka na dokončanje druge niti.
Kalkulator t1=nov kalkulator ();
t1. začetek ();
System.out.println (t1.sum);
Kakšna je podobnost med spanjem in čakanjem v Javi?
Spanje in čakanje sta metodi, ki ju je mogoče uporabiti pri izvajanju večnitnosti v Javi
Kakšna je razlika med spanjem in čakanjem v Javi?
spanje proti čakanju v Javi |
|
Metoda spanja povzroči, da trenutna nit prekine izvajanje za določeno število milisekund, odvisno od natančnosti in točnosti sistemskih časovnikov in načrtovalcev. | Metoda čakanja povzroči, da trenutna nit čaka, dokler druga nit ne prikliče metode notify ali notifyAll za objekt. |
Povezava s ključavnico | |
Metoda mirovanja ne sprosti zaklepanja predmeta med sinhronizacijo. | Način čakanja sprosti zaklepanje med sinhronizacijo. |
Način izvedbe | |
Metoda spanja se izvede v trenutni niti. | Na objektu je poklicana metoda čakanja. |
Povezani razred | |
Spanje je metoda razreda Thread. | Čakanje je metoda razreda Object. |
Dokončanje | |
Proces spanja je končan po preteku določenega časa. | Metoda čakanja je prekinjena s klicem metod notify ali notifyAll. |
Povzetek – spanje ali čakanje v Javi
V operacijskem sistemu se izvaja več procesov. Vsak proces ima lahko več niti. Nit je najmanjša enota obdelave v operacijskem sistemu. Programski jezik Java podpira večnitnost. Omogoča izvajanje več niti hkrati. Spanje in čakanje sta dve metodi, ki ju je mogoče uporabiti pri izvajanju večnitnosti. Razlika med spanjem in čakanjem v Javi je ta, da se spanje uporablja za prekinitev izvajanja trenutne niti za določeno število milisekund, medtem ko se metoda čakanja uporablja za povzročitev, da trenutna nit počaka, dokler druga nit ne prikliče notify ali notifyAll metoda za predmet.