130 likes | 206 Views
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.
E N D
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 synchronizedno 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