threads sem sincronização
DESCRIPTION
Threads sem Sincronização. Threads sem Sincronização. Frequentemente , múltiplas threads de execução manipulam um objeto compartilhado na memória. Quando isto ocorre, e esse objeto é modificado por uma ou mais threads, podem ocorrer resultados inesperados. Threads sem Sincronização. - PowerPoint PPT PresentationTRANSCRIPT
Threads sem Sincronização
Threads sem Sincronização
• Frequentemente, múltiplas threads de execução manipulam um objeto compartilhado na memória.
• Quando isto ocorre, e esse objeto é modificado por uma ou mais threads, podem ocorrer resultados inesperados.
Threads sem Sincronização
• Quando isto ocorre, o comportamento do programa não pode ser confiável.
• O programa pode produzir tanto resultados corretos como incorretos.
• Neste caso, o objeto compartilhado precisa ser gerenciado adequadamente.
Sincronização de Threads
• O problema pode ser resolvido fornecendo a uma thread por vez, o código de acesso exclusivo que manipula o objeto compartilhado.
• As outras threads que desejam manipular o objeto são mantidas em espera.
Sincronização de Threads
• Quando a thread que tem o acesso exclusivo ao objeto, terminar, uma das threads que foi mantida na espera, tem a permissão de prosseguir.
• Toda thread que acessa o objeto compartilhado, exclui todas as outras threads de fazer o acesso ao objeto compartilhado.
Sincronização de Threads
• Esse mecanismo é chamado de exclusão mútua.
• Exclusão mútua permite ao programador fazer a sincronização de threads, que coordena o acesso ao objeto compartilhado (dados compartilhados) para múltiplas threads concorrentes.
Sincronização de Threads
• Java realiza sincronização de threads através de:•Monitores
• Locks
• Semáforos
Monitor
• Utilizar monitores pre-definidos de Java.
• Cada objeto compartilhado tem um monitor, que permite que uma thread por vez execute dentro de uma instrução synchronized no objeto compartilhado.
Monitor
• Existirá um bloqueio no objeto compartilhado, quando uma instrução synchronized é executada.
• Todas as threads que tentarem executar uma instrução synchronized no objeto compartilhado, serão colocadas no estado bloqueado.
Monitor
• Quando uma thread executável tem de esperar para entrar em uma instrução synchronized, ela transita para o estado bloqueado.
• Quando a thread bloqueada entra em uma instrução synchronized , ela transita para o estado executável.
Monitor
• Quando uma instrução synchronized concluir sua execução, o bloqueio do monitor no objeto compartilhado, será liberado, e a thread bloqueada de prioridade mais alta que estiver tentando entrar em uma instrução synchronized prosseguirá.
Instrução synchronized
synchronized ( objeto )
{ instruções
} // fim da instrução synchronized
Métodos synchronized
• Java permite métodos synchronized.
• Um método synchronized é equivalente a uma instrução synchronized para incluir o corpo inteiro de um método.
• Ver os exemplos Deitel 23.6, 23.7 e 23.8mais os exemplos 23.19 e 23.20