Apleturi Java

7. Fire de executie
Cand folositi Windows 95 (sau alte sisteme de operare), puteti rula mai multe programe in acelasi timp. Aceasta capacitate se numeste multitasking. Multe dintre sistemele de operare permit de asemenea fire de executie, care sunt procese separate ce apartin unei aplicatii. Un fir de executie seamana mult cu un subprogram. Un aplet poate crea mai multe fire de executie si le poate rula in mod concurent. Este ceva asemanator cu a avea multitasking in multitasking.
In Java exista cel putin doua modalitati prin care puteti crea fire de executie:
a) una este sa transformati o clasa existenta (alta decat Thread) intr-un fir de executie. Puteti face aceasta modificand clasa astfel incat sa implementeze interfata Runnable, care declara metoda run() ceruta de toate tipurile de fire de executie (functia run() trebuie sa contina codul care trebuie executat de un fir, ea nu are initial cod, deci trebuie suprascrisa).
b) cealalta modalitate este de a scrie o clasa separata derivata din clasa Thread. Deoarece aceasta clasa implementeaza interfata Runnable, deja contine o metoda run().
Pot fi situatii cand aveti mai multe fire de executie care lucreaza pe aceleasi resurse. Acest lucru poate fi mortal pentru fire. De exemplu, ce se va intampla daca un fir incearca sa citeasca dintr-un sir in timp ce alt fir inca mai scrie in sirul respectiv? Puteti evita o seama de erori folosind cuvantul cheie syncronized la definirea metodei respective. Ca urmare, Java va crea un obiect de tip monitor. Prima data cand un fir apeleaza o metoda sincronizata, Java preda monitorul acestui fir. Atata vreme cat firul tine monitorul, nici un alt fir nu poate apela metoda sincronizata. Va puteti gandi la monitor ca la o cheie. Daca un fir nu detine cheia, nu poate descuia usa catre metoda sincronizata.

1