Threads sem Sincronizao Threads sem Sincronizao Frequentemente mltiplas

  • Slides: 13
Download presentation
Threads sem Sincronização

Threads sem Sincronização

Threads sem Sincronização • Frequentemente, múltiplas threads de execução manipulam um objeto compartilhado na

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

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

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,

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

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 •

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,

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.

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

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

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 ( objeto ) { instruções } // fim da instrução synchronized

Instrução synchronized ( objeto ) { instruções } // fim da instrução synchronized

Métodos synchronized • Java permite métodos synchronized. • Um método synchronized é equivalente a

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. 8 mais os exemplos 23. 19 e 23. 20