threads sem sincronização

13
Threads sem Sincronização

Upload: olive

Post on 06-Jan-2016

19 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Threads sem Sincronização

Threads sem Sincronização

Page 2: 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.

Page 3: Threads sem Sincronização

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.

Page 4: Threads sem Sincronização

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.

Page 5: Threads sem Sincronização

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.

Page 6: Threads sem Sincronização

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.

Page 7: Threads sem Sincronização

Sincronização de Threads

• Java realiza sincronização de threads através de:•Monitores

• Locks

• Semáforos

Page 8: Threads sem Sincronização

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.

Page 9: Threads sem Sincronização

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.

Page 10: Threads sem Sincronizaçã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.

Page 11: Threads sem Sincronização

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á.

Page 12: Threads sem Sincronização

Instrução synchronized

synchronized ( objeto )

{ instruções

} // fim da instrução synchronized

Page 13: Threads sem Sincronização

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