Métodos e Classes para Sincronização no JDK 5.0 Vitor Hugo Becker
2 Programação Com Objetos Distribuídos Métodos e Classes para Sincronização no JDK 5.0 Os Mecanismos de Sincronização do JDK 5.0 Sincronizadores Ferramentas para sincronização em geral: Semaphores – Semáforos que permitem exclusão mútua; CyclicBarrier – Barreiras; CountDownLatch – Travas decrescentes; Exchanger – Trocadores. Locks Pode ser mais eficaz que syncronized, pois tem suporte a timeout; Podemos definir múltiplas variáveis de condição para um lock; Pacote java.util.concurrent.locks
3 Programação Com Objetos Distribuídos Métodos e Classes para Sincronização no JDK 5.0 CyclicBarrier Permite definir uma barreira dentro do código para fins de sincronização. Exige que todas as threads atinjam a barreira antes de prosseguirem executando; É cíclica, podendo ser reusada; CountDownLatch Tranca que começa com um número X e é decrementada a cada execução, sendo liberada apenas ao atingir valor igual a 0. Contador não reseta automaticamente; Threads que invocam wait() com contador zerado são liberadas; Os Mecanismos de Sincronização do JDK 5.0
4 Programação Com Objetos Distribuídos Métodos e Classes para Sincronização no JDK 5.0 Exchanger Realizam troca de dados entre threads de maneira atômica e segura. É chamado utilizando como parâmetro o objeto a ser trocado com outra thread; Caso haja outra thread esperando, o método irá retornar o objeto que a outra thread passou como parâmetro; Caso não hajam threads esperando, o método espera por uma até que consiga realizar a troca; Os Mecanismos de Sincronização do JDK 5.0
5 Programação Com Objetos Distribuídos Métodos e Classes para Sincronização no JDK 5.0 Lock Permite exclusão mútua para múltiplas threads, substituindo o syncronized. Regiões críticas menores, executando mais rapidamente o código; Deve ser usado com bloco try... Finally para evitar inconsistências; Podem ser utilizados mais de um tipo de óbjeto para lock, com características específicas; Permite chain lock: adquire A, depois B, libera A, adquire C,... [Alan- Cristiano] Os Mecanismos de Sincronização do JDK 5.0
6 Programação Com Objetos Distribuídos Métodos e Classes para Sincronização no JDK 5.0 ReentrantLock Pode utilizar fairness usando fila FIFO. Garante fairness mas perde muito em desempenho; Define os métodos isLocked e getLockQueueLength. ReadWriteLock Garante que diversas threads acessem um determinado objeto somente para leitura e somente uma para escrita. Aumento no desempenho em leitores-descritores. Os Mecanismos de Sincronização do JDK 5.0
7 Programação Com Objetos Distribuídos Métodos e Classes para Sincronização no JDK 5.0 Bibliografia Concurrent Programming with J2SE 5.0. Disponível por WWW em (abr. 2005) J2SE 5.0 in a Nutshell. Disponível por WWW em (abr. 2005). JDK 5.0 Documentation. Disponível por WWW em (abr. 2005).