Sunteți pe pagina 1din 2

Bună! În primul rând, felicitări: ați ajuns la subiectul Multithreading în Java!

Aceasta este o realizare serioasă - ați parcurs un drum lung. Dar pregătiți-vă:
acesta este unul dintre cele mai dificile subiecte ale cursului. Și nu este că
folosim clase complexe sau o mulțime de metode aici: de fapt, vom folosi mai puțin
de douăzeci. Mai mult, va trebui să schimbi ușor modul în care gândești. Anterior,
programele dumneavoastră au fost executate secvenţial. Unele linii de cod au venit
după altele, unele metode au venit după altele și totul era practic clar. Mai
întâi, am calculat ceva, apoi am afișat rezultatul pe consolă și apoi programul sa
încheiat. Pentru a înțelege multithreading-ul, este mai bine să gândiți în termeni
de paralelism. Să începem cu ceva destul de simplu: ) Imaginează-ți că familia ta
se mută dintr-o casă în alta. Adunarea tuturor cărților va fi o parte importantă a
mișcării. Ai acumulat o mulțime de cărți și trebuie să le pui în cutii. În prezent,
ești singurul disponibil. Mama pregătește mâncarea, fratele împachetează hainele,
iar sora a mers la magazin. Singur, te poți descurca cumva. Mai devreme sau mai
târziu, vei finaliza singur sarcina, dar va dura mult timp. Totuși, sora ta se va
întoarce de la magazin în 20 de minute și nu are altceva de făcut. Deci ea se poate
alătura ție. Sarcina nu s-a schimbat: puneți cărțile în cutii. Dar se execută de
două ori mai repede. De ce? Pentru că lucrarea se desfășoară în paralel. Două
„file” diferite (tu și sora ta) îndeplinesc aceeași sarcină simultan. Și dacă nimic
nu se schimbă, atunci va exista o diferență de timp uriașă în comparație cu
situația în care faci totul de unul singur. Dacă fratele își termină treaba în
curând, te poate ajuta și lucrurile vor merge și mai repede.
Probleme rezolvate prin multithreading
Multithreading a fost de fapt inventat pentru a atinge două obiective importante:

Faceți mai multe lucruri în același timp.

În exemplul de mai sus, diferite fire (membri ai familiei) au efectuat mai


multe acțiuni în paralel: au spălat vase, au mers la magazin și au împachetat
lucrurile.

Putem oferi un exemplu mai strâns legat de programare. Să presupunem că aveți


un program cu o interfață de utilizator. Când faceți clic pe „Continuare” în
program, ar trebui să aibă loc unele calcule și utilizatorul ar trebui să vadă
următorul ecran. Dacă aceste acțiuni ar fi efectuate secvențial, atunci programul
s-ar bloca doar după ce utilizatorul face clic pe butonul „Continuare”.
Utilizatorul va vedea ecranul cu ecranul butonului „Continuare” până când programul
efectuează toate calculele interne și ajunge în partea în care interfața cu
utilizatorul este reîmprospătată.

Ei bine, cred că vom aștepta câteva minute!


Multithreading în Java: ce este, beneficiile sale și capcanele comune - 3

Sau ne-am putea reelabora programul sau, așa cum spun programatorii, să-l
„paralelizăm”. Să ne efectuăm calculele pe un fir și să desenăm interfața cu
utilizatorul pe altul. Majoritatea computerelor au suficiente resurse pentru a face
acest lucru. Dacă luăm această rută, atunci programul nu se va îngheța, iar
utilizatorul se va mișca fără probleme între ecrane, fără să-și facă griji cu
privire la ceea ce se întâmplă în interior. Una nu interfereaza cu cealalta :)

Efectuați calcule mai rapid.

Totul este mult mai simplu aici. Dacă procesorul nostru are mai multe nuclee și
majoritatea procesoarelor de astăzi au, atunci mai multe nuclee pot gestiona lista
noastră de sarcini în paralel. Evident, dacă trebuie să îndeplinim 1000 de sarcini
și fiecare durează o secundă, un nucleu poate termina lista în 1000 de secunde,
două nuclee în 500 de secunde, trei în puțin mai mult de 333 de secunde etc.

Dar, așa cum ați citit deja în această lecție, sistemele de astăzi sunt foarte
inteligente și chiar și pe un singur nucleu de calcul sunt capabile să atingă
paralelism, sau mai degrabă pseudo-paralelism, unde sarcinile sunt efectuate
alternativ. Să trecem generalitățile la detalii și să cunoaștem cea mai importantă
clasă din biblioteca multithreading Java — java.lang.Thread. Strict vorbind, firele
Java sunt reprezentate de instanțe ale clasei Thread . Aceasta înseamnă că pentru a
crea și rula 10 fire, aveți nevoie de 10 instanțe ale acestei clase. Să scriem cel
mai simplu exemplu:

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