Sunteți pe pagina 1din 8

Thread-uri preemtive

și cooperative
Ciclul de viaţă

 1. Starea ”NewThread”
 Obiectul fir de execuție a fost creat dar înca nu a fost
startat.
 Thread fir=new Thread(obiectActiv);
 //fir se gaseste in starea "New Thread„
 Nu are alocate resurse
 Putem apela start
 2. Runnable – Firul se afla in starea in care poate fi
rulat in momentul in care procesorul devine
disponibil.
 Fir.start();
// firul de execuție devine activ
Alocare resurse
Planificare la procesor
Apel run()
 3. Blocked sau not-runnable – Firul de execuție
este blocat si nu poate fi rulat, chiar daca
 procesorul este disponibil.
 Este ”adormit de metoda sleep()
 Activăm metoda wate() așteptînd realizarea unei
condișii
 Este blocat într-o operație de I/O
 4. Dead – Calea normala prin care un fir se termina
este prin ieșirea din metoda run(). Se poate forța
terminarea firului apelând metoda stop()
 dar nu se recomanda folosirea sa, fiind o metoda
“depreciată” in Java2.

 System.exit termină forțat toate firele de execuție


Modurile de rulare a thread-urilor

Sistemele de operare “programează” diferitele procese


pentru a rula în două moduri:

- Preemptiv
- Cooperativ
Sistem preemptiv

În cazul sistemelor preemptive sistemul de operare oferă fiecărui


proces sau fir de execuţie o cuantă de timp pentru a-şi îndeplini
scopul. Sistemele preemptive garantează că fiecare fir de execuţie
va ajunge să ruleze într-o perioadă de timp dată – altfel spus
fiecare fir are rezervate, de exemplu, cîte 50 milisecunde pentru
rulare. Chiar dacă în acest timp firul de execuţie nu a reuşit să-şi
îndeplinească misiunea, starea lui este salvată şi un alt fir va fi
lansat în execuţie de către sistemul de operare. Acest lucru se
întîmplă pînă cînd toate firele de execuţie reuşesc să ruleze o dată.
Apoi procesul se reia începînd cu primul fir de execuţie – acesta
rulează 50 milisecunde, urmează la rînd al doilea fir de execuţie
care rulează din nou 50 milisecunde şi aşa mai departe.
Sistem cooperativ
 În cazul sistemelor cooperative, fiecare fir de execuţie trebuie să
permită în mod voluntar accesul altor fire la resursele sistemului.
Am subliniat “în mod voluntar” pentru că în acest caz sistemul de
operare nu mai este responsabil pentru “programarea” diferitelor
procese sau fire pentru a rula – este răspunderea fiecărui fir în
parte pentru a permite şi altora să-şi desfăşoare activitatea. În
practică putem întîlni situaţii în care un fir caparează resursele
întregului sistem pînă cînd termină ceea ce are de făcut fără să mai
permită altui fir dreptul de rulare. Sistemele de multitasking
cooperativ sînt eficiente în cazul aplicaţiilor în timp real.
 O bună parte dintre implementările maşinii virtuale Java utilizează
politica cooperativă. Aceasta înseamnă că fiecare fir dintr-o
aplicaţie Java trebuie să ofere periodic oportunitatea rulării şi altor
fire. Există mai multe posibilităţi pentru atingerea acestui scop.

S-ar putea să vă placă și