Buscar

Threads, Concorrência e GUI Swing

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

PROGRAMAÇÃO ORIENTADA A OBJETOS
Aula 10- Desenvolvendo aplicativos com threads, concorrência e GUI Swing
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
Conteúdo Programático desta aula
 Utilizar múltiplos Threads separados para modificar conteúdos exibidos em uma GUI Swing. 
 Trabalhar de forma sincronizada com cada um dos Threads 
 Criar e executar um aplicativo de múltiplos threads.
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
Sincronização
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. 
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
Sincronização
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 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
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
Threads e GUI Swing
Os componentes GUI Swing não são seguros quanto ao uso de Threads, quer dizer que se múltiplas Threads acessam um componente Swing, os resultados podem não estar corretos. Todas as interações com componentes Swing devem ser executadas a partir de uma Thread de cada vez. Normalmente, esta Thread é uma Thread de tratamento ou execução de eventos. 
É fundamental que uma tela GUI Swing não congele, podendo responder ao usuário sempre que necessário. 
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
Tipos de Threads
Então, para criar um programa que responda as necessidades do usuário, o programador precisa aprender como a estrutura Swing trabalha com Threads:
Thread Inicial: executa o código inicial da aplicação
Thread de tratamento de evento: onde todo o tratamento de eventos é feito. A maioria das interações com componentes Swing devem ser feitos através deste Thread.
Thread de trabalho – worker: processos executados em segundo plano, que consomem processamento.
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
Event Dispatcher Thread
A classe SwingUtilities fornece dois métodos para ajudar a fazer o tratamento de eventos na execução do programa. São eles:
invokeLater(): Solicita que algum código seja executado na Thread de despacho de evento. Este método retorna imediatamente a execução do código, sem que seja necessário esperar.
invokeAndWait(): Atua muito semelhante ao invokeLater(), exceto pelo fato de esperar pela execução do código. Como regra, procure utilizar sempre o método invokeLater() ao invés deste.
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
Produtor / Consumidor com Buffer e GUI
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
As classes desenvolvidas
Produtor Inteiro: Classe responsável pela produção do conteúdo e disponibilizado na área compartilhada;
Consumidor Inteiro: Classe responsável pelo consumo do conteúdo disponibilizado na área compartilhada;
Buffer Inteiro Sincronizado: O local onde será feito a sincronização da leitura e da escrita em um buffer de cinco posições;
Atualiza Thread: Thread responsável pela comunição entre os Threads e a Interface Gráfica;
Buffer Rotativo: Classe responsável pela configuração, disparo e recebimento das informações dos produtores e consumidores. É onde se encontra o procedimento main();
Tema da Apresentação
DESENVOLVENDO APLICATIVOS COM THREADS, CONCORRÊNCIA E GUI SWING – AULA 10
PROGRAMAÇÃO ORIENTADA A OBJETOS
FIM
Tema da Apresentação

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais