Documente Academic
Documente Profesional
Documente Cultură
[H.G: 9.1-9.5]
• Clasa Thread
Blocat
Un fir (de executare) este gata de executare dacă îndeplineşte toate
condiţiile pentru a se trece la executarea sa, dar nu i s-a alocat încă un procesor;
când un procesor liber preia firul, acesta trece în starea în curs de executare.
Blocarea unui fir de executare poate fi realizată pe baza unei condiţii (de exemplu
un semafor); ca urmare firul trece în starea blocat. La deblocarea sa, realizată prin
mecanisme dintre care unele vor fi prezentate în continuare, el revine în starea gata
de executare, aşteptând ca un procesor să devină liber şi să reia executarea sa.
Metoda run din clasa Thread nu prevede vreo acţiune. De aceea trebuie
ca programatorul să extindă clasa Thread şi să rescrie (suprapună) metoda run,
precizând acţiunea dorită.
• Interfaţa Runnable
Interfaţa Runnable apare în pachetul java.lang şi este declarată prin:
public interface Runnable
şi anunţă doar metoda:
public void run()
prin care este creat (*) şi apoi lansat (**) firul de executare Fir. Observăm că a
fost folosit constructorul cu un argument, al cărui tip este o clasă ce implementează
interfaţa Runnable.
Exemplul 4.
class Tip extends Thread {
static int total; int i;
Tip(int i) { this.i=i; }
void delay() {
try { sleep( (int) (100 * Math.random()) ); }
catch(InterruptedException e) { }
}
public void run() {
int temp;
for (int j=1; j<=10; j++) {
IO.write(" "+i); delay(); temp=total;
delay(); temp++; delay(); total=temp;
}
}
}
class Grad_Rau {
public static void main(String[] sir) {
Tip[] Ob = new Tip[5];
for (int i=0; i<5; i++) Ob[i] = new Tip(i);
for (int i=0; i<5; i++) Ob[i].start();
try { for (int i=4; i>=0; i--) Ob[i].join(); }
catch (InterruptedException e) { }
IO.writeln(); IO.writeln("Total = " + Tip.total);
}
}
✑
Pentru consideraţii suplimentare privind programarea paralelă urmăriţi secţiunea 9.3 din
lucrarea: Horia Georgescu, Introducere în universul Java, Editura Tehnică, 2002.
Vom construi un arbore binar complet şi vom ataşa valori vârfurilor sale.
În rădăcină va fi calculată valoarea finală cerută de problemă. Fiecărui nod intern i
se ataşează o valoare parţială şi anume "suma" corespunzătoare (sub)arborelui de
rădăcină i; pe fiecare nivel (adâncime în arbore) calculele se execută în paralel.
Metoda este de tip bottom-up, adică vom parcurge arborele pe niveluri, plecând de
la frunze şi mergând spre rădăcină.