| |
Sincronização de threads
Como fazer uma thread suspender-se à espera de que "algo interessante" seja
feito por outras threads?
- Qualquer objecto pode ter associado um monitor, no sentido de [Hoare 78];
- Basta que a sua classe tenha métodos declarados zonas críticas, com
synchronized ,
e neles usar (ver classe Object):
wait : torna a thread corrente Not Runnable até alguém
libertar o objecto com notify
notify, notifyall : avisa thread(s) "penduradas" de que o objecto
está liberto, tornando-a(s) Runnable
- Exemplo
do tutorial
- Monitores de Java são reentrantes: a mesma thread pode "readquirir
o lock" sobre o mesmo objecto várias vezes.
Os recursos criticos são os objectos, e as zonas (de código) críticas são os
métodos (ou blocos) qualificados com synchronized
|