Baixe o app para aproveitar ainda mais
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
Compartilhar