Somn și așteptare sunt două metode utilizate pentru multithreading în Java. Metoda de somn aparține clasei Thread în timp ce metoda de așteptare este din clasa Object. diferența cheie între somn și așteptați în Java este că, somnul este folosit pentru a suspenda execuția thread-ului curent pentru numărul specificat de milisecunde în timp ce metoda de așteptare este utilizată pentru a determina thread-ul curent să aștepte până când un alt fir invocă metoda de notificare sau notificationAll pentru obiect.
Un fir 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 a rula multiple fire în același timp. Limbile de programare, cum ar fi Java, suportă multithreading. Multithreading are avantaje deoarece permite să ruleze simultan mai multe fire și firele sunt independente una de cealaltă. Există metode în Java care pot fi utilizate pentru multithreading. Doi dintre ei dorm și așteaptă.
1. Prezentare generală și diferență cheie
2. Ce este somnul în Java
3. Ce se așteaptă în Java
4. Asemănări Între somn și așteptare în Java
5. Comparație comparativă - somn vs. așteptare în Java în formă tabulară
6. rezumat
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 schimbare de context care are loc între aceste fire. În Java, există două moduri de a crea un fir. Aceasta este prin extinderea clasa thread sau prin implementarea interfeței Runnable. Clasa Thread are constructori și metode pentru a crea și efectua operații pe un fir. Clasa Thread extinde clasa Object și implementează interfața Runnable. Interfața Runnable trebuie implementată de orice clasă ale cărei instanțe sunt destinate a fi executate de un fir. Când firul se execută, codul care trebuie executat este scris în interiorul metodei de rulare. Firele care trebuie executate sunt selectate 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ă, firul se spune că este în stare nouă. Planificatorul de fire selectează un fir de execuție. Dacă firul nu este încă selectat de planificatorul de fire, dar dacă se invocă metoda de pornire, firul se află într-o stare de funcționare. După ce planificatorul firului selectează firul care urmează să fie executat, acesta trece în starea de funcționare. Dacă firul este în viață, dar în prezent nu este eligibil să se execute, atunci acesta este în stare care nu poate fi executată sau blocată. După terminarea metodei de rulare, firul trece la starea terminată. Acestea sunt principalele faze ale ciclului de viață a firului.
Există diferite metode disponibile în clasa thread pentru a efectua diferite sarcini. Metoda de somn este folosită pentru a adormi metoda pentru o anumită perioadă de timp. Sintaxa pentru metoda de somn este somnul public void (lungi de milisecunde) aruncă InterruptedException. Aceasta determină ca firul care execută în prezent să înceteze executarea temporară pentru un anumit număr de milisecunde. Dacă un alt fir întrerupe firul curent, starea întreruptă a firului curent este șters atunci când această excepție este aruncată.
Figura 01: Programul Java cu metoda de somn
Conform programului de mai sus, metoda de rulare conține un cod care trebuie executat. În programul principal, sunt create două obiecte din ExempluThread1, iar metodele de pornire sunt invocate pe ele. Acest lucru va permite rularea codului în cadrul metodei de rulare. Doar un singur fir execută la un moment dat. Cu Fileul. somn (1000); va permite primului thread să termine execuția timp de 1000 de milisecunde. Atunci când un fir de dormit, planificatorul de fire acceptă celălalt fir.
Fire multiple pot accesa o resursă partajată. Poate genera o ieșire incorectă. Sincronizarea subiectelor poate fi utilizată pentru a face doar un fir pentru a accesa resursa partajată. Să presupunem o situație după cum urmează. Dacă există două fire ca t1 și t2, t1 începe salvarea valorilor într-un fișier text numit Text1.txt. Aceste valori vor fi folosite pentru un alt calcul atunci când t1 se întoarce. Dacă t2 începe înainte de întoarcerea t1, t2 poate schimba 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ă utilizeze fișierul Text1.txt, acel fișier poate fi blocat, astfel că este accesibil numai prin t1. T2 nu poate schimba până când t1 eliberează blocarea pentru a accesa acel fișier text. Când sarcina este finalizată, t1 poate elibera încuietoarea. Blocarea este cunoscută și ca monitor.
Sincronizarea firului poate fi realizată prin comunicarea între fire. O secțiune critică este un segment de cod care accesează resursele partajate. În comunicarea inter-fir, un fir este întrerupt în curs de execuție în secțiunea sa critică, iar un alt fir este permis să intre în aceeași secțiune critică care trebuie executată. Acesta este implementat folosind metodele de așteptare, notificare și notificare. Acestea aparțin clasei Obiect. 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. AnunțareaAll trezește toate firele care așteaptă pe încuietori.
Figura 02: Clasa de calculatoare
Figura 03: Metoda principală
Clasa Calculator extinde Thread-ul. Blocul sincronizat se află în interiorul metodei de rulare. Metoda pentru buclă și notificare se află în interiorul blocului sincronizat. În interiorul metodei principale, o instanță a unui fir creat și metoda de pornire este apelată pe 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ă ce metoda de notificare este apelată, metoda principală oprește așteptarea și începe executarea restului codului. Principalul așteaptă până când fișierul Calculator este finalizat. În final, rezultatul sumei este imprimat.
Dacă nu există un bloc sincronizat și dacă metoda principală are un cod ca mai jos, va da ieșirea ca zero deoarece nu așteaptă ca celălalt fir să se încheie.
Calculator t1 = Calculator nou ();
T1. start ();
System.out.println (t1.sum);
somn vs așteptați în Java | |
Metoda de somn determină ca firul curent să suspende execuția pentru numărul specificat de milisecunde, în funcție de precizia și acuratețea timerelor și programatorilor sistemului. | Metoda de așteptare face ca firul curent să aștepte până când un alt fir invocă metoda de notificare sau notificareAll pentru obiect. |
Asociația cu Lock | |
Metoda de somn nu eliberează blocarea unui obiect în timpul sincronizării. | Metoda de așteptare eliberează blocarea în timpul sincronizării. |
Metodă de executare | |
Metoda de somn este executată pe firul curent. | Metoda de așteptare este apelată pe obiect. |
Clasa asociată | |
Somnul este o metodă de clasă Thread. | Așteptarea este o metodă a clasei Object. |
Completare | |
Procesul de somn este finalizat după depășirea timpului specificat. | Metoda de așteptare este întreruptă prin apelarea metodelor de notificare sau de notificare. |
Există mai multe procese care rulează pe sistemul de operare. Fiecare proces poate avea mai multe fire. Un fir este cea mai mică unitate de procesare dintr-un sistem de operare. Limba de programare Java suporta multithreading. Permite rularea mai multor fire simultan. Somnul și așteptarea sunt două metode care pot fi folosite atunci când se implementează multi-filetare. Diferența dintre somn și așteptare în Java este că somnul este folosit 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 notificarea pentru obiect.
1. "Comunicarea inter-thread în Java - Javatpoint.". JavaTPoint. Disponibil aici
2. Inter Thread Comunicarea în Java Multithreading Core Java Tutorial | Studytonight. Disponibil aici