Buscar

PROGRAMAÇÃO ORIENTADA A OBJETOS Aula 09

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 6 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 6 páginas

Prévia do material em texto

- -1
PROGRAMAÇÃO ORIENTADA A OBJETOS
THREADS E CONCORRÊNCIA EM JAVA
- -2
Olá!
Nesta aula, você irá:
1. Aplicar os conceitos e threads, processos concorrentes e sincronização em pequenos programas.
2. Aplicar e verificar os conceitos de prioridade de execução de cada uma dos threads.
3. Criar e executar um aplicativo de múltiplos threads.
Introdução
Seja bem-vindo à disciplina de Programação Orientado a Objetos.
Nesta nona aula estaremos aplicando os conceitos de threads, processos concorrentes e sincronização em
pequenos programas.
Estaremos também aplicando e verificando os conceitos de prioridade de execução de cada uma das threads.
Por fim estaremos desenvolvendo um aplicativo com múltiplas threads.
Sincronização de Threads
Durante a execução de threads, há casos em que elas trabalham independentemente uma da outra, sem
necessidade de qualquer comunicação entre elas. Por outro lado, há casos em que elas comunicam-se de alguma
forma ou utilizam dados em comum. Este comportamento gera a necessidade de denominar os threads em
assíncronas e síncronas, dependendo da forma de trabalho desempenhada. Threads que trabalham
independentes no tempo, são assíncronas enquanto aquelas que trocam informações em tempo de execução são
síncronas.
As threads se diferem dos processos por poderem ter áreas de dados comuns. Isto pode facilitar em muito a
implementação de programas. Porém, pode causar alguns erros quando a mesma base de dados é alterada por
mais de um thread, em momentos inesperados.
A solução para este problema é utilizar um mecanismo de sincronização que permita a thread acessar a base de
dados compartilhada apenas quando os dados estiverem (outras threads não estejam manipulandoestáveis 
estes dados).
Java adotou a palavra chave synchronized para informar que um determinado bloco deve estar síncrono com os
demais threads. O sincronismo gera um bloco atômico (indivisível). Assim, este bloco passa a ser protegido,
evitando que a thread atual seja interrompida por outro thread, independente da prioridade.
• O uso de memória compartilhada entre os threads obriga o programador a sincronizar as ações de suas 
threads.
• Para isso, Java provê monitores ou locks. Imagine um lock como uma permissão para que apenas um 
•
•
- -3
threads.
• Para isso, Java provê monitores ou locks. Imagine um lock como uma permissão para que apenas um 
thread possa utilizar um recurso por vez.
• Cada objeto em Java possui um lock e ele deve ser obtido através do comando synchronized.
Os métodos wait(), notify() e notifyAll() também são muito importantes na sincronização, sendo responsáveis
por provocar, respectivamente: uma espera, a liberação de uma ou mais threads em espera.
Motivação para programação concorrente
Na maioria dos programas que desenvolvemos, criamos programas que na maioria dos casos os processos são
assíncronos e quando há alguma complexidade na execução das tarefas, delegamos este processo para a JVM. Ela
é a responsável por criar e distribuir os threads do nosso sistema.
Mas quando desenvolvemos determinados tipos de aplicativos, onde fica claro que existem uma fonte de
recursos e algum outro programa que precisa destes recursos para executar ou gravar algo. Como exemplo,
podemos citar a migração de dados de um sistema para outro. Precisamos ler os dados, processar estes dados e,
quando estiverem prontos, guardar os dados no novo sistema.
Resolvendo este tipo de problema sincronamente, teremos o seguinte trabalho:
Eu posso ler de diversas fontes e apenas um centralizador irá gravar. Isso sobrecarrega tanto a leitura, o
processamento e a gravação.
•
•
Fique ligado
Em muitas situações, threads devem compartilhar dados e são obrigados a se preocuparem
com que cada uma está fazendo e em que tempo. Este é um problema típico de programação
concorrente.
- -4
Este típico problema deve ser tratado com o algoritmo de Produtor / Consumidor
Produtor / Consumidor
Para começar, vamos entender o algoritmo do Produtor / Consumidor. Neste relacionamento, um Thread
Produtor produz um determinado dado, que é disponibilizado em uma área comum. Por sua vez, o Thread
Consumidor deverá buscar nesta área compartilhada o dado produzido. Com isso, cada Thread faz uma parte do
trabalho e outra faz a outra. Podemos ver na Figura um exemplo típico deste processo:
Para ilustrar o problema de uma maneira lúdica, veja a ilustração de Michael Vigneau:
- -5
Para mais informações, leia “Produtor / Consumidor sem sincronização”, no link: http://estaciodocente.webaula.
com.br/cursos/gon282/docs/14POO_aula09_doc02.pdf
Leia também “Produtor / Consumidor com sincronização”: http://estaciodocente.webaula.com.br/cursos
/gon282/docs/14POO_aula09_doc01.pdf
Para que usar as threads em Java?
Existem várias aplicações e usos para os threads. Se a sua aplicação Java for um servidor, como um servidor web
por exemplo, você deve estar atendendo a mais de um cliente ao mesmo tempo. Com isso, é possível que você
queira uma thread por cliente.
Uma aplicação interativa pode precisar executar algo que demora um certo tempo enquanto a interface com o
usuário é apresentada em outra thread para avisar que o processador está trabalhando.
Às vezes encontramos em nossos programas a execução de trechos independentes, que poderiam ser executados
em paralelo. Neste caso, é apropriado cria uma thread para cada parte e executar todas de uma vez, visto que a
ordem entre elas não altera o resultado final do meu sistema.
Outro aspecto relevante é que cada vez mais, os processadores estão mais rápidos e com um número maior de
núcleos. Cada núcleo é capaz de executar uma thread em paralelo. O grande desafio que temos hoje em dia é
conseguir paralelizar nossos processos para utilizar todos os recursos de hardware disponíveis!
http://estaciodocente.webaula.com.br/cursos/gon282/docs/14POO_aula09_doc02.pdf
http://estaciodocente.webaula.com.br/cursos/gon282/docs/14POO_aula09_doc02.pdf
http://estaciodocente.webaula.com.br/cursos/gon282/docs/14POO_aula09_doc01.pdf
http://estaciodocente.webaula.com.br/cursos/gon282/docs/14POO_aula09_doc01.pdf
- -6
O que vem na próxima aula
•Desenvolvimento de Aplicativos com Threads, Concorrência e GUI Swing.
CONCLUSÃO
Nesta aula, você:
• Aplicou os conceitos e threads, processos concorrentes e sincronização em pequenos programas.
• Aplicou e verificou os conceitos de prioridade de execução de cada uma dos threads.
• Criou e executou um aplicativo de múltiplos threads.
Saiba mais
Para esta aula sugiro as seguintes tarefas:
• Leitura do Capítulo 23 (23.6 até 23.7) do livro Java como programar, 6ª Edição, 
de H. Deitel e P. Deitel, Editora Pearson Education, 2005.
• Resolução dos exercícios de 23.5 até 23.9 do capítulo 23 do livro Java Como 
Programar – 6ª Edição.
•
•
•
•
•
	Olá!
	
	O que vem na próxima aula
	CONCLUSÃO

Mais conteúdos dessa disciplina