Documente Academic
Documente Profesional
Documente Cultură
RAPORT
La lucrarea de laborator nr.2
2
Obiectivele lucrării
Înțelegerea modelelor de execuție concurentă și cunoașterea tehnicilor esențiale de
sincronizare ale activităților bazate pe operațiile atomare ale semaforului; obiectivul specific
constând în crearea unei aplicații Java ce ar utiliza sigur diverse structuri într-un context de
execuție concurentă.
3
Un ajutor de sincronizare care permite unuia sau mai multor fire să aștepte până la
finalizarea unui set de operații efectuate în alte fire.
Un CountDownLatch este inițializat cu un număr . Metodele de așteptare se blochează
până când numărul curent ajunge la zero din cauza invocațiilor metodei countDown (), după care
sunt eliberate toate firele de așteptare și orice invocații ulterioare de aștepta revin imediat. Acesta
este un fenomen unic - numărul nu poate fi resetat.
Un CountDownLatch este un instrument de sincronizare versatil și poate fi utilizat în mai
multe scopuri. Un CountDownLatch inițializat cu un număr de unul servește ca un simplu zăvor
on / off, sau poartă: toate firele care invocă așteaptă la poartă până când este deschis de un fir
care invocă countDown (). Un CountDownLatch inițializat la N poate fi folosit pentru a face un
fir să aștepte până când N fire au finalizat o acțiune sau o acțiune a fost finalizată de N ori.
O proprietate utilă a unui CountDownLatch este că nu necesită ca firele care apelează
countDown să aștepte ca numărul să ajungă la zero înainte de a continua, pur și simplu împiedică
orice fir să treacă peste o așteptare până când toate firele ar putea trece
4
public class Worker
{
private CountDownLatch _countdown;
private ArrayList<Worker> _waiters;
private int _workersWait;
private int timeout;
private Thread thread;
public String name;
public Worker(String name, int timeout)
{
this.name = name;
this.timeout = timeout;
_countdown = new CountDownLatch(1);
_waiters = new ArrayList<Worker>();
thread = new Thread("Fir nou") {
public void run(){
release();
}
};
}
public void run()
{
thread.start();
}
5
for (Worker waiter : _waiters)
{
waiter._countdown.countDown();
}
}
}
}
Rezultatul execuției:
La execuția codului, afișarea rezultatului va fi mereu diferit în ceea ce ține de ordinea
firelor 2,3,4 și 5,6 7. Aceasta este provocată de faptul că firele 2,3,4 mereu o să aștepte firul 1,
deci primul mereu va fi 1, iar următoarele random se vor porni 2,3,4. După ideea aceasta se vor
afișa și următoarele fire, 5,6,7 ce deja vor fi dependente de firele 2,3,4 conform pornirii acestora.
Rezultatul:
Concluzie
În urma realizarii lucrării de laborator am dobîndit cunoștințe practice în lucrul cu firele
de execuție și controlul lor de execuție. Deasemenea în timpul efectuării sarcinii am identificat
notele de curs referitor la metoda de sincronizare CountDown, cum ar fi absența metodei de
resetare în java.