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.