Diferența Dintre Somn și Așteptare în Java

Cuprins:

Diferența Dintre Somn și Așteptare în Java
Diferența Dintre Somn și Așteptare în Java

Video: Diferența Dintre Somn și Așteptare în Java

Video: Diferența Dintre Somn și Așteptare în Java
Video: Abstractizare, încapsulare, moștenire, polimorfism | Tutorial Java începători #6 2024, Mai
Anonim

Diferența cheie - somn vs așteptare în Java

Sleep and wait sunt două metode utilizate pentru multithreading în Java. Metoda de repaus aparține clasei Thread în timp ce metoda de așteptare este din clasa Object. Diferența cheie dintre somn și așteptare în Java este că somnul este utilizat pentru a suspenda execuția firului curent pentru numărul specificat de milisecunde, în timp ce metoda de așteptare este utilizată pentru a determina firul curent să aștepte până când un alt fir invocă notificarea sau notificationAll metodă pentru obiect.

Un thread este cea mai mică unitate de procesare din sistemul de operare. Este un singur flux secvențial de control în cadrul unui program. Firele sunt ușoare. Multithreading este mecanismul de executare a mai multor fire în același timp. Limbaje de programare, cum ar fi Java, acceptă multithreading. Multithreading are avantaje, deoarece permite rularea mai multor fire simultan, iar thread-urile sunt independente una de cealaltă. Există metode în Java care pot fi utilizate pentru multithreading. Doi dintre ei dorm și așteaptă.

CUPRINS

1. Prezentare generală și diferența cheie

2. Ce este somnul în Java

3. Ce este așteptarea în Java

4. Asemănări între somn și așteptare în Java

5. Comparare alăturată - somn vs așteptare în Java în formă tabelară

6. Rezumat

Ce este somnul în Java?

Există mai multe procese care rulează într-un sistem de operare. Un proces este un program în execuție. Fiecare proces poate avea mai multe fire și există o comutare a contextului între aceste fire. În Java, există două moduri de a crea un fir. Asta prin extinderea clasei de fire sau prin implementarea interfeței Runnable. Clasa Thread are constructori și metode pentru a crea și efectua operațiuni pe un thread. Clasa Thread extinde clasa Object și implementează interfața Runnable. Interfața Runnable ar trebui să fie implementată de orice clasă ale cărei instanțe sunt destinate a fi executate de un thread. Când firul se execută, codul care ar trebui să fie executat este scris în metoda de rulare. Firul care ar trebui să ruleze este selectat de programatorul de fire. Numai un fir rulează într-un singur proces.

Un fir trece prin mai multe faze. După crearea unui obiect din clasa Thread, programatorul poate invoca metoda de pornire. Înainte de a invoca această metodă, se spune că firul se află în noua stare. Programatorul de fire selectează un thread pentru a rula. Dacă firul nu este încă selectat de planificatorul de fire, dar dacă este invocată metoda de pornire, atunci firul este într-o stare executabilă. După ce planificatorul de fire selectează firul de executat, acesta trece la starea de rulare. Dacă firul este viu, dar nu este eligibil să ruleze în prezent, acesta se află în stare non-rulabilă sau blocată. După finalizarea metodei de rulare, firul trece la starea terminată. Acestea sunt principalele faze ale ciclului de viață al firului.

Există diverse metode disponibile în clasa thread pentru a efectua diferite sarcini. Metoda de somn este utilizată pentru a dormi metoda pentru o anumită perioadă de timp. Sintaxa pentru metoda de somn este publică somnul gol (milisecunde lungi) aruncă InterruptedException. Face ca firul de executare curent să oprească executarea temporară pentru un număr specificat de milisecunde. Dacă un alt fir întrerupe firul curent, starea întreruptă a firului curent este ștearsă atunci când se lansează această excepție.

Diferența dintre somn și așteptare în Java
Diferența dintre somn și așteptare în Java

Figura 01: Program Java cu metodă de somn

Conform programului de mai sus, metoda de rulare conține cod care ar trebui executat. În programul principal, sunt create două obiecte ale ExampleThread1, iar metodele de pornire sunt invocate pe ele. Acest lucru vă va permite să rulați codul în interiorul metodei de rulare. Se execută un singur fir odată. Cu firul. somn (1000); va permite primului fir să încheie execuția timp de 1000 de milisecunde. Când un fir este în repaus, programatorul de fire preluează celălalt fir.

Ce este așteptarea în Java?

Mai multe fire pot accesa o resursă partajată. Poate provoca generarea unei ieșiri incorecte. Sincronizarea firelor poate fi utilizată pentru a crea un singur fir pentru a accesa resursa partajată. Să presupunem o situație după cum urmează. Dacă există două fire ca t1 și t2, t1 începe să salveze valorile într-un fișier text numit Text1.txt. Aceste valori vor fi utilizate pentru alte calcule atunci când t1 revine. Dacă t2 începe înainte ca t1 să revină, t2 poate modifica valorile salvate de t1. Acest lucru poate determina t1 să furnizeze o ieșire greșită. Cu ajutorul sincronizării, atunci când t1 începe să folosească fișierul Text1.txt, acel fișier poate fi blocat, deci este accesibil doar de t1. T2 nu îl poate modifica până când t1 nu eliberează blocarea pentru a accesa acel fișier text. Când sarcina este finalizată, t1 poate elibera blocarea. Blocarea este, de asemenea, cunoscută sub numele de monitor.

Sincronizarea firelor poate fi realizată prin comunicarea inter-thread. O secțiune critică este un segment de cod care accesează resursele partajate. În comunicația inter-thread, un thread este întrerupt rulând în secțiunea sa critică și un alt thread este permis să intre în aceeași secțiune critică pentru a fi executat. Este implementat folosind metode de așteptare, notificare și notificare. Aparțin clasei Object. Metoda de așteptare este utilizată pentru a permite firului curent să elibereze blocarea și să aștepte până când un alt fir invocă metoda de notificare sau notificare pentru obiect. Metoda de notificare este utilizată pentru a trezi un singur fir care așteaptă blocarea. NotificareAll trezește toate firele care așteaptă pe blocare.

Diferența dintre somn și așteptare în Java Figura 02
Diferența dintre somn și așteptare în Java Figura 02

Figura 02: Clasa calculatorului

Diferența cheie dintre somn și așteptare în Java
Diferența cheie dintre somn și așteptare în Java

Figura 03: Metoda principală

Clasa Calculator extinde firul. Blocul sincronizat se află în metoda de rulare. Metoda pentru buclă și notificare se află în blocul sincronizat. În interiorul metodei principale, o instanță a unui fir creat și metoda de pornire sunt apelate la acea instanță. Metoda principală va aștepta până când firul va da o notificare. La executarea programului, metoda principală așteaptă până la întreaga execuție a metodei de rulare și așteaptă metoda de notificare. Odată apelată metoda de notificare, metoda principală încetează să mai aștepte și începe să execute restul codului. Principalul așteaptă până când se termină firul Calculator. În cele din urmă, rezultatul sumei este tipărit.

Dacă nu există niciun bloc sincronizat și dacă metoda principală are un cod ca mai jos, va da ieșirea ca zero, deoarece nu așteaptă finalizarea celuilalt fir.

Calculator t1 = nou Calculator ();

t1. start ();

System.out.println (t1.sum);

Care este asemănarea dintre somn și așteptare în Java?

Atât somnul, cât și așteptarea sunt metode care pot fi utilizate atunci când implementați multithreading în Java

Care este diferența dintre somn și așteptare în Java?

Difuzarea articolului din mijloc înainte de tabel

somn vs așteptare în Java

Metoda de repaus determină firul curent să suspende execuția pentru numărul specificat de milisecunde, în funcție de precizia și acuratețea cronometrelor și planificatorilor de sistem. Metoda de așteptare face ca firul curent să aștepte până când un alt fir invocă metoda de notificare sau notificare pentru obiect.
Asociere cu Lock
Metoda de repaus nu eliberează blocarea unui obiect în timpul sincronizării. Metoda de așteptare eliberează blocarea în timpul sincronizării.
Metoda de executare
Metoda de repaus este executată pe firul curent. Metoda de așteptare este apelată la obiect.
Clasa asociată
Somnul este o metodă a clasei Thread. Așteptarea este o metodă a clasei Object.
Completare
Procesul de repaus este finalizat după ce timpul specificat a trecut. Metoda de așteptare este întreruptă apelând metodele de notificare sau de notificare Toate.

Rezumat - somn vs așteptare în Java

Există mai multe procese care rulează pe sistemul de operare. Fiecare proces poate avea mai multe fire. Un thread este cea mai mică unitate de procesare dintr-un sistem de operare. Limbajul de programare Java acceptă multithreading. Permite rularea mai multor fire simultan. Repausul și așteptarea sunt două metode care pot fi utilizate atunci când implementați multi-threading. Diferența dintre somn și așteptare în Java este că, somnul este utilizat pentru a suspenda execuția firului curent pentru numărul specificat de milisecunde în timp ce metoda de așteptare este utilizată pentru a determina firul curent să aștepte până când un alt fir invocă notificarea sau notificare metoda obiectului.

Recomandat: