SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Linguagem de Programação III
Multithreading

Professora: Bianca de Almeida Dantas
E-mail: bianca.dantas@ifms.edu.br
Site: www.biancadantas.com
TÓPICOS
• Threads           Essa aula e seus exemplos foram baseados no
                    capítulo 26 do livro Java - Como Programar, 8ª
   • Ciclo de vida Edição (Deitel & Deitel)
   • Agendamento
   • Criação e execução
   • Exemplo
• Produtor-Consumidor
• Multithreading com GUI
THREADS
• Linhas de execução dentro de um processo.
  Conhecidas como processos leves.
• Cada thread possui sua pilha de chamadas de
  métodos e contador de instruções, entretanto a
  troca de contexto entre threads de um mesmo
  processo é menos custosa.
• Permite a execução concorrente de trechos de
  código que independem entre si.
• Se mais de um núcleo de processamento estiver
  disponível, a execução pode ser paralela.
• Linhas de execução dentro de um processo.
  Conhecidas como processos leves.
• Cada thread possui sua pilha de chamadas de
  métodos e contador de instruções, entretanto a
  troca de contexto entre threads de um mesmo
  processo é menos custosa.
• Permite a execução concorrente de trechos de
  código que independem entre si.
• Se mais de um núcleo de processamento estiver
  disponível, a execução pode ser paralela.
• Linhas de execução dentro de um processo.
  Conhecidas como processos leves.
• Cada thread possui sua pilha de chamadas de
  métodos e contador de instruções, entretanto a
  troca de contexto entre threads de um mesmo
  processo é menos custosa.
• Permite a execução concorrente de trechos de
  código que independem entre si.
• Se mais de um núcleo de processamento estiver
  disponível, a execução pode ser paralela.
THREADS – Ciclo de Vida
• Novo: a thread acaba de ser criada e ainda não
  foi iniciada pela primeira vez.
• Executável: a thread está realizando o seu
  processamento ou pronta para executá-lo.
• Espera: a thread está esperando que outra thread
  realize uma tarefa. Volta para o estado executável
  apenas quando outra thread a notifica.
• Espera sincronizada: a thread está esperando por
  um intervalo máximo de tempo.
• Bloqueado: a thread tentou realizar uma tarefa
  que não pôde ser imediatamente completada, ela
  fica neste estado até que a tarefa seja
  completada e, então, transita para o estado
  executável.
• Terminado: uma thread entra neste estado
  quando finaliza seu processamento (com ou sem
  sucesso).
• O estado executável pode ser subdividido em dois
  estados separados operacionalmente: pronto e
  em execução.
• O SO oculta a diferença entre esses dois estados
  da JVM, que os vê unicamente como executáveis.
• Quando uma thread é criada e passa para o
  estado executável, ela está, na verdade, no
  estado pronto; quando ela está efetivamente
  executando, ela está no estado em execução.
• Despachar uma thread: quando uma thread tem
  um processador atribuído a ela.
• Geralmente, uma thread executa por um
  pequeno período de tempo, o chamado quantum
  ou fração de tempo.
• Quando o quantum termina, a thread passa
  novamente para o estado pronto.
THREADS – Agendamento
• Agendamento de threads é o processo que o
  sistema operacional utiliza para definir a ordem de
  execução de threads.
• O agendador de threads (thread scheduler), em
  geral, utiliza as prioridades associadas às threads
  para definir sua política de execução.
• Em Java, as prioridades variam entre MIN_PRIORITY
  (uma constante de 1) e MAX_PRIORITY (uma
  constante de 10). Threads, geralmente, são
  iniciadas com NORM_PRIORITY.
• As três constantes são definidas na classe Thread.
.......
THREADS – Criação e Execução
• Para especificar uma classe cujo código pode ser
  executado concorrentemente em uma aplicação,
  pode-se utilizar a interface Runnable.
• As threads podem ser instanciadas passando como
  argumento um objeto Runnable.
EXEMPLO
• Código do projeto Multithread2 enviado por e-
  mail....
pool-1-thread-1 escreveu o valor 1 em 0
Próximo índice = 1
pool-1-thread-2 escreveu o valor 11 em 0
Próximo índice = 2
pool-1-thread-1 escreveu o valor 2 em 1
Próximo índice = 3
pool-1-thread-2 escreveu o valor 12 em 2
Próximo índice = 4
pool-1-thread-1 escreveu o valor 3 em 3
Próximo índice = 5
pool-1-thread-2 escreveu o valor 13 em 4
Próximo índice = 6

Conteúdo do vetor:
[11, 2, 12, 3, 13, 0]
• Como as threads executam independentemente e
  compartilham um vetor, o resultado pode não ser
  como desejado.
• Pela saída anterior, vimos que a thread 2
  sobrescreveu o valor recém escrito pela thread 1.
• Situações como essa, nas quais não conseguimos
  garantir que o resultado será coerente e nas quais o
  resultado dependerá da ordem em que as threads
  serão escalonadas são chamadas de condições de
  corrida.
• O trecho de código no qual as diferentes threads
  acessam as variáveis compartilhadas
  (possivelmente, modificando-as) é chamado de
  seção crítica.
• Resumindo: o código visto não é seguro para
  threads.
• Para resolver o problema, transformaremos os
  trechos de acesso às variáveis compartilhadas em
  operações atômicas, impedindo que mais de uma
  thread execute tais instruções simultaneamente.
EXEMPLO
• Código do projeto Multithread2 alterado enviado
  por e-mail.
• Nesse código, fizemos com que o código do método
  que adiciona um elemento ao SimpleArray seja
  atômico. Em Java, isso é feito usando a palavra-
  chave synchronized.
• Quando uma thread está executando o corpo de
  um método synchronized, nenhuma outra pode
  executá-la antes da primeira terminar sua execução.
• A instrução synchronized também pode ser
  utilizada para trechos de código.
PRODUTOR-CONSUMIDOR
• Um problema clássico da computação que envolve
  processos (ou threads) que produzem recursos para
  serem consumidos por outros.
• Existe um buffer compartilhado para
  armazenamento dos recursos. O produtor precisa
  parar de produzir quando o buffer estiver cheio e o
  consumidor não pode consumir se não houver
  recurso disponível.
ABORDAGEM 1
• Utilizar um buffer compartilhado com apenas uma
  posição (classe BufferSemSincronizacao).
• Não há garantia sobre a ordem de execução das
  threads, logo, muitas vezes valores são produzidos
  com o buffer lotado ou, ainda, consumidos antes da
  produção, levando a resultados inconsistentes.
ABORDAGEM 2
• Utilizar um buffer compartilhado com apenas uma
  posição, mas utilizando ArrayBlockingQueue (classe
  BufferBloqueante).
• A classe ArrayBlockingQueue pertence ao pacote
  java.util.concurrent, segura para threads e que
  implementa a interface BlockingQueue (que
  estende a classe Queue) e declara os métodos put e
  take (equivalentes bloqueantes dos métodos offer
  e poll.
• put coloca um elemento no fim da fila bloqueando
  se a mesma estiver cheia.
• take retira um elemento do começo da fila
  bloqueando se a mesma estiver vazia.
• O tamanho do ArrayBlockingQueue é passado como
  argumento para o construtor e não é aumentado
  dinamicamente.
ABORDAGEM 3
• Utilizar um buffer compartilhado com apenas uma
  posição, mas utilizando métodos sincronizados
  (synchronized).
• Utiliza uma variável booleana ocupado que indica se o
  buffer está totalmente ocupado ou não.
• O produtor espera enquanto o buffer estiver lotado
  utilizando uma chamada ao método wait.
  Similarmente, o consumidor espera enquanto o buffer
  estiver vazio.
• O método wait faz com que o objeto que o executou
  libere implicitamente o bloqueio sobre o buffer.
• O produtor/consumidor só é liberado de sua
  espera quando for notificado de que o objeto
  compartilhado já foi utilizado; isso é feito com a
  chamada a notifyAll.
• O método notifyAll retira do estado de espera
  todas as threads que estiverem esperando pelo
  objeto compartilhado, fazendo com que elas
  passem ao estado executável e tentem
  readquirir o bloqueio.
ABORDAGEM 4
• Utilizar um buffer circular compartilhado com 4
  posições.
• Permite minimizar o tempo de espera das threads
  devido ao aumento das posições disponíveis para
  escrita e leitura.
• Utiliza:
   • uma variável auxiliar para controlar quantos
     elementos válidos realmente há no buffer em um
     determinado momento.
   • Dois índices para indicar onde será feita a próxima
     leitura ou a próxima escrita.
MULTITHREADING COM GUI
• Aplicativos GUI são desafiantes para programação
  multithreaded.
• Aplicativos swing possuem uma única thread, a
  thread de despacho de eventos, responsável por
  tratar as interações com os componentes GUI do
  aplicativo.
• Todas as tarefas que exigem interação com a GUI do
  aplicativo são colocadas em uma fila de eventos e
  executadas em sequência pela thread de despacho
  de eventos.
• Componentes GUI Swing não são seguros para
  threads.
• Segurança para threads em aplicativos GUI é obtida
  assegurando que os componentes Swing são
  acessado a partir de uma única thread (a de
  despacho de eventos). Essa técnica é chamada de
  confinamento de thread.
• Utilizando essa ideia, uma alternativa interessante é
  colocar as atividades de longa duração, que
  independem da interface enquanto são executadas,
  em threads separadas da de despacho de eventos.
• Essa alternativa evita que a thread de despacho de
  eventos fique sem responder enquanto espera pelo
  resultado de tais atividades.
• Para auxiliar na programação dessas atividades
  mais demoradas em threads separadas, o Java SE 6
  fornece a classe SwingWorker. Essa classe pode
  realizar cálculos demorados e, então, atualizar s
  componentes Swing a partir da thread de despacho
  de eventos com base nos resultados dos cálculos.
• SwingWorker implemente a interface Runnable.
• Métodos comuns de SwingWorker:
  • doInBackground: define o cálculo longo na thread
    trabalhadora;
  • done: executado na thread de despacho de eventos
    quando doInBackground retorna;
  • execute: agenda o objeto SwingWorker a ser
    executado em uma thread trabalhadora;
  • get: espera a conclusão do cálculo e retorna o seu
    resultado;
  • publish: envia resultados intermediários dos cálculos
    para processamento na thread de despacho de
    eventos.
• process: recebe os resultados intermediários e os
  processa na thread de despacho de eventos;
• setProgress: configura a propriedade de progresso
  para notificar os ouvintes de alteração de
  propriedade na thread de despacho de eventos de
  atualizações da barra de progresso.
EXEMPLO 1: FIBONACCI
• No exemplo, forneceremos uma opção para calcular os
  termos da sequência de Fibonacci um a um ou para
  calcular um termo específico (até o 92º) em uma
  thread trabalhadora.
• SwingWorker é uma classe genérica que recebe dois
  parâmetros: o primeiro é o tipo retornado pelo método
  doInBackground e o segundo é o tipo passado entre os
  métodos publish e process.
EXEMPLO 2: ÍMPARES
• No exemplo, calculamos todos os números ímpares
  menores que um valor inteiro fornecido como entrada.
• Para obtenção dos ímpares, utilizamos o crivo de
  Eratóstenes.
• Os resultados são exibidos em uma área de texto à
  medida em que são obtidos.
• Uma barra de progresso mostra o quanto do cálculo já
  foi concluído até um determinado momento.
REFERÊNCIAS
• Java Como Programar – 8ª Edição. Deitel &
  Deitel.

Mais conteúdo relacionado

Mais procurados

SO-03 Comunicação e Sincronização de Processos
SO-03 Comunicação e Sincronização de ProcessosSO-03 Comunicação e Sincronização de Processos
SO-03 Comunicação e Sincronização de ProcessosEduardo Nicola F. Zagari
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas OperacionaisAdir Kuhn
 
Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxMarceloRosenbrock1
 
Exemplo de documento de requisitos
Exemplo de documento de requisitosExemplo de documento de requisitos
Exemplo de documento de requisitosLeandro Rodrigues
 
Tecnologías de Desarrollo de Sistemas Distribuidos basados en Objetos
Tecnologías de Desarrollo de Sistemas Distribuidos basados en ObjetosTecnologías de Desarrollo de Sistemas Distribuidos basados en Objetos
Tecnologías de Desarrollo de Sistemas Distribuidos basados en ObjetosTensor
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08André Phillip Bertoletti
 
Linha de Produto de Software: Diferentes produtos para diferentes clientes
Linha de Produto de Software: Diferentes produtos para diferentes clientesLinha de Produto de Software: Diferentes produtos para diferentes clientes
Linha de Produto de Software: Diferentes produtos para diferentes clientesPriscylla Silva
 
Documento de requisitos_-_especificacoes 01
Documento de requisitos_-_especificacoes 01Documento de requisitos_-_especificacoes 01
Documento de requisitos_-_especificacoes 01gtiprotec
 
Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Faculdade Mater Christi
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
Aula Introdução a Arquitetura e Organização de Computadores
Aula Introdução a Arquitetura e Organização de ComputadoresAula Introdução a Arquitetura e Organização de Computadores
Aula Introdução a Arquitetura e Organização de ComputadoresGilvan Latreille
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionaisalexculpado
 
Sistemas Distribuídos - Computação Distribuída e Paralela
Sistemas Distribuídos - Computação Distribuída e ParalelaSistemas Distribuídos - Computação Distribuída e Paralela
Sistemas Distribuídos - Computação Distribuída e ParalelaAdriano Teixeira de Souza
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de UsoNatanael Simões
 
Resumo de S.O.
Resumo de S.O.Resumo de S.O.
Resumo de S.O.dannas_06
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitoselliando dias
 

Mais procurados (20)

SO-03 Comunicação e Sincronização de Processos
SO-03 Comunicação e Sincronização de ProcessosSO-03 Comunicação e Sincronização de Processos
SO-03 Comunicação e Sincronização de Processos
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptx
 
Exemplo de documento de requisitos
Exemplo de documento de requisitosExemplo de documento de requisitos
Exemplo de documento de requisitos
 
Tecnologías de Desarrollo de Sistemas Distribuidos basados en Objetos
Tecnologías de Desarrollo de Sistemas Distribuidos basados en ObjetosTecnologías de Desarrollo de Sistemas Distribuidos basados en Objetos
Tecnologías de Desarrollo de Sistemas Distribuidos basados en Objetos
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08
 
Linha de Produto de Software: Diferentes produtos para diferentes clientes
Linha de Produto de Software: Diferentes produtos para diferentes clientesLinha de Produto de Software: Diferentes produtos para diferentes clientes
Linha de Produto de Software: Diferentes produtos para diferentes clientes
 
Documento de requisitos_-_especificacoes 01
Documento de requisitos_-_especificacoes 01Documento de requisitos_-_especificacoes 01
Documento de requisitos_-_especificacoes 01
 
Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)Gerenciamento de memória cap 03 (ii unidade)
Gerenciamento de memória cap 03 (ii unidade)
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Aula Introdução a Arquitetura e Organização de Computadores
Aula Introdução a Arquitetura e Organização de ComputadoresAula Introdução a Arquitetura e Organização de Computadores
Aula Introdução a Arquitetura e Organização de Computadores
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
 
Sistemas Distribuídos - Computação Distribuída e Paralela
Sistemas Distribuídos - Computação Distribuída e ParalelaSistemas Distribuídos - Computação Distribuída e Paralela
Sistemas Distribuídos - Computação Distribuída e Paralela
 
Endereçamento de memória
Endereçamento de memóriaEndereçamento de memória
Endereçamento de memória
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de Uso
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
Resumo de S.O.
Resumo de S.O.Resumo de S.O.
Resumo de S.O.
 
Sistemas Operacionais e Mercado de Trabalho
Sistemas Operacionais e Mercado de TrabalhoSistemas Operacionais e Mercado de Trabalho
Sistemas Operacionais e Mercado de Trabalho
 
Analise de Requisitos
Analise de RequisitosAnalise de Requisitos
Analise de Requisitos
 

Destaque

Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Bianca Dantas
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalBianca Dantas
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos GrafosBianca Dantas
 
Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Bianca Dantas
 
Software Projects Java Projects Ieee Projects Domains
Software Projects Java Projects Ieee Projects DomainsSoftware Projects Java Projects Ieee Projects Domains
Software Projects Java Projects Ieee Projects Domainsncct
 
Multithreaded algorithms
Multithreaded algorithmsMultithreaded algorithms
Multithreaded algorithmsSoicon Karo
 
Programação Orientada a Objetos - Pós Graduação - Aula 2
Programação Orientada a Objetos - Pós Graduação - Aula 2Programação Orientada a Objetos - Pós Graduação - Aula 2
Programação Orientada a Objetos - Pós Graduação - Aula 2Carlos Eduardo
 
Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...
Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...
Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Carlos Eduardo
 
Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...
Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...
Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...Carlos Eduardo
 
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de ControleProgramação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de ControleCarlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Carlos Eduardo
 
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OOProgramação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OOCarlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaCarlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Carlos Eduardo
 

Destaque (20)

Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222
 
24 Multithreaded Algorithms
24 Multithreaded Algorithms24 Multithreaded Algorithms
24 Multithreaded Algorithms
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
 
Apresentacao mochila - parte 1
Apresentacao mochila - parte 1Apresentacao mochila - parte 1
Apresentacao mochila - parte 1
 
Pseudoparalelismo
PseudoparalelismoPseudoparalelismo
Pseudoparalelismo
 
Software Projects Java Projects Ieee Projects Domains
Software Projects Java Projects Ieee Projects DomainsSoftware Projects Java Projects Ieee Projects Domains
Software Projects Java Projects Ieee Projects Domains
 
Multithreaded algorithms
Multithreaded algorithmsMultithreaded algorithms
Multithreaded algorithms
 
Programação Orientada a Objetos - Pós Graduação - Aula 2
Programação Orientada a Objetos - Pós Graduação - Aula 2Programação Orientada a Objetos - Pós Graduação - Aula 2
Programação Orientada a Objetos - Pós Graduação - Aula 2
 
Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...
Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...
Programação Orientada a Objetos - Pós Graduação - Aula 8 - Bad Smells & Desig...
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4
 
Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...
Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...
Programação Orientada a Objetos - Pós Graduação - Aula 5 - refactoring com ho...
 
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de ControleProgramação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
Programação Orientada a Objetos - Pós Graduação - Aula 7 - Inversão de Controle
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3
 
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OOProgramação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
 
Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1
 
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
 
Java Lista Exercicios 04
Java Lista Exercicios 04Java Lista Exercicios 04
Java Lista Exercicios 04
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2
 

Semelhante a Aula sobre multithreading

Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...rafaelov
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadMario Guedes
 
Escalonamento no Windows
Escalonamento no WindowsEscalonamento no Windows
Escalonamento no WindowsFee Kosta
 
Java memory model primary ref. - faq
Java memory model   primary ref. - faqJava memory model   primary ref. - faq
Java memory model primary ref. - faqPedro De Almeida
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Vinicius Pulgatti
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Charles Fortes
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)Helder da Rocha
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...rafaelov
 
Cap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfCap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfHurgelNeto
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - ThreadsGlaucio Scheibel
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasHelder da Rocha
 
SD_Aula_04_Introdução ao SD.pdf
SD_Aula_04_Introdução ao SD.pdfSD_Aula_04_Introdução ao SD.pdf
SD_Aula_04_Introdução ao SD.pdfFerro Gaita
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoAlexandre Duarte
 

Semelhante a Aula sobre multithreading (20)

Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
 
Net - Threads
Net - ThreadsNet - Threads
Net - Threads
 
Escalonamento no Windows
Escalonamento no WindowsEscalonamento no Windows
Escalonamento no Windows
 
Thread Java
Thread JavaThread Java
Thread Java
 
04 threads
04 threads04 threads
04 threads
 
Java memory model primary ref. - faq
Java memory model   primary ref. - faqJava memory model   primary ref. - faq
Java memory model primary ref. - faq
 
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO, Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0
 
12 threads
12 threads12 threads
12 threads
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
 
Cap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdfCap-6-Multiplrocessadores.pdf
Cap-6-Multiplrocessadores.pdf
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticas
 
APM Model in .NET - PT-pt
APM Model in .NET - PT-ptAPM Model in .NET - PT-pt
APM Model in .NET - PT-pt
 
SD_Aula_04_Introdução ao SD.pdf
SD_Aula_04_Introdução ao SD.pdfSD_Aula_04_Introdução ao SD.pdf
SD_Aula_04_Introdução ao SD.pdf
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: Sincronização
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 

Último

Questões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LPQuestões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LPEli Gonçalves
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmicolourivalcaburite
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptxJssicaCassiano2
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdLeonardoDeOliveiraLu2
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...SileideDaSilvaNascim
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...MariaCristinaSouzaLe1
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...marcelafinkler
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...AnaAugustaLagesZuqui
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptNathaliaFreitas32
 
Acessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidadeAcessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidadeLEONIDES PEREIRA DE SOUZA
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Centro Jacques Delors
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024azulassessoria9
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxMarcosLemes28
 
Aprender as diferentes formas de classificar as habilidades motoras é de extr...
Aprender as diferentes formas de classificar as habilidades motoras é de extr...Aprender as diferentes formas de classificar as habilidades motoras é de extr...
Aprender as diferentes formas de classificar as habilidades motoras é de extr...azulassessoria9
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfAutonoma
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfRepública Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfLidianeLill2
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...marcelafinkler
 

Último (20)

Questões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LPQuestões de Língua Portuguesa - gincana da LP
Questões de Língua Portuguesa - gincana da LP
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
Pesquisa Ação René Barbier Livro acadêmico
Pesquisa Ação René Barbier Livro  acadêmicoPesquisa Ação René Barbier Livro  acadêmico
Pesquisa Ação René Barbier Livro acadêmico
 
6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx6ano variação linguística ensino fundamental.pptx
6ano variação linguística ensino fundamental.pptx
 
Falando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introdFalando de Física Quântica apresentação introd
Falando de Física Quântica apresentação introd
 
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...apostila filosofia 1 ano  1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
apostila filosofia 1 ano 1s (1).pdf 1 ANO DO ENSINO MEDIO . CONCEITOSE CARAC...
 
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
Aula 25 - A america espanhola - colonização, exploraçãp e trabalho (mita e en...
 
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
Introdução às Funções 9º ano: Diagrama de flexas, Valor numérico de uma funçã...
 
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
Tema de redação - As dificuldades para barrar o casamento infantil no Brasil ...
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Aula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .pptAula 1 - Psicologia Cognitiva, aula .ppt
Aula 1 - Psicologia Cognitiva, aula .ppt
 
Acessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidadeAcessibilidade, inclusão e valorização da diversidade
Acessibilidade, inclusão e valorização da diversidade
 
Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)Sopa de letras | Dia da Europa 2024 (nível 2)
Sopa de letras | Dia da Europa 2024 (nível 2)
 
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 2 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Cartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptxCartão de crédito e fatura do cartão.pptx
Cartão de crédito e fatura do cartão.pptx
 
Aprender as diferentes formas de classificar as habilidades motoras é de extr...
Aprender as diferentes formas de classificar as habilidades motoras é de extr...Aprender as diferentes formas de classificar as habilidades motoras é de extr...
Aprender as diferentes formas de classificar as habilidades motoras é de extr...
 
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdfatividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
atividade-de-portugues-paronimos-e-homonimos-4º-e-5º-ano-respostas.pdf
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdfRepública Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
República Velha (República da Espada e Oligárquica)-Sala de Aula.pdf
 
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM  POLÍGON...
Polígonos, Diagonais de um Polígono, SOMA DOS ANGULOS INTERNOS DE UM POLÍGON...
 

Aula sobre multithreading

  • 1. Linguagem de Programação III Multithreading Professora: Bianca de Almeida Dantas E-mail: bianca.dantas@ifms.edu.br Site: www.biancadantas.com
  • 2. TÓPICOS • Threads Essa aula e seus exemplos foram baseados no capítulo 26 do livro Java - Como Programar, 8ª • Ciclo de vida Edição (Deitel & Deitel) • Agendamento • Criação e execução • Exemplo • Produtor-Consumidor • Multithreading com GUI
  • 3. THREADS • Linhas de execução dentro de um processo. Conhecidas como processos leves. • Cada thread possui sua pilha de chamadas de métodos e contador de instruções, entretanto a troca de contexto entre threads de um mesmo processo é menos custosa. • Permite a execução concorrente de trechos de código que independem entre si. • Se mais de um núcleo de processamento estiver disponível, a execução pode ser paralela.
  • 4. • Linhas de execução dentro de um processo. Conhecidas como processos leves. • Cada thread possui sua pilha de chamadas de métodos e contador de instruções, entretanto a troca de contexto entre threads de um mesmo processo é menos custosa. • Permite a execução concorrente de trechos de código que independem entre si. • Se mais de um núcleo de processamento estiver disponível, a execução pode ser paralela.
  • 5. • Linhas de execução dentro de um processo. Conhecidas como processos leves. • Cada thread possui sua pilha de chamadas de métodos e contador de instruções, entretanto a troca de contexto entre threads de um mesmo processo é menos custosa. • Permite a execução concorrente de trechos de código que independem entre si. • Se mais de um núcleo de processamento estiver disponível, a execução pode ser paralela.
  • 7. • Novo: a thread acaba de ser criada e ainda não foi iniciada pela primeira vez. • Executável: a thread está realizando o seu processamento ou pronta para executá-lo. • Espera: a thread está esperando que outra thread realize uma tarefa. Volta para o estado executável apenas quando outra thread a notifica. • Espera sincronizada: a thread está esperando por um intervalo máximo de tempo.
  • 8. • Bloqueado: a thread tentou realizar uma tarefa que não pôde ser imediatamente completada, ela fica neste estado até que a tarefa seja completada e, então, transita para o estado executável. • Terminado: uma thread entra neste estado quando finaliza seu processamento (com ou sem sucesso).
  • 9. • O estado executável pode ser subdividido em dois estados separados operacionalmente: pronto e em execução. • O SO oculta a diferença entre esses dois estados da JVM, que os vê unicamente como executáveis. • Quando uma thread é criada e passa para o estado executável, ela está, na verdade, no estado pronto; quando ela está efetivamente executando, ela está no estado em execução.
  • 10. • Despachar uma thread: quando uma thread tem um processador atribuído a ela. • Geralmente, uma thread executa por um pequeno período de tempo, o chamado quantum ou fração de tempo. • Quando o quantum termina, a thread passa novamente para o estado pronto.
  • 11.
  • 12. THREADS – Agendamento • Agendamento de threads é o processo que o sistema operacional utiliza para definir a ordem de execução de threads. • O agendador de threads (thread scheduler), em geral, utiliza as prioridades associadas às threads para definir sua política de execução. • Em Java, as prioridades variam entre MIN_PRIORITY (uma constante de 1) e MAX_PRIORITY (uma constante de 10). Threads, geralmente, são iniciadas com NORM_PRIORITY. • As três constantes são definidas na classe Thread.
  • 14. THREADS – Criação e Execução • Para especificar uma classe cujo código pode ser executado concorrentemente em uma aplicação, pode-se utilizar a interface Runnable. • As threads podem ser instanciadas passando como argumento um objeto Runnable.
  • 15. EXEMPLO • Código do projeto Multithread2 enviado por e- mail....
  • 16. pool-1-thread-1 escreveu o valor 1 em 0 Próximo índice = 1 pool-1-thread-2 escreveu o valor 11 em 0 Próximo índice = 2 pool-1-thread-1 escreveu o valor 2 em 1 Próximo índice = 3 pool-1-thread-2 escreveu o valor 12 em 2 Próximo índice = 4 pool-1-thread-1 escreveu o valor 3 em 3 Próximo índice = 5 pool-1-thread-2 escreveu o valor 13 em 4 Próximo índice = 6 Conteúdo do vetor: [11, 2, 12, 3, 13, 0]
  • 17. • Como as threads executam independentemente e compartilham um vetor, o resultado pode não ser como desejado. • Pela saída anterior, vimos que a thread 2 sobrescreveu o valor recém escrito pela thread 1. • Situações como essa, nas quais não conseguimos garantir que o resultado será coerente e nas quais o resultado dependerá da ordem em que as threads serão escalonadas são chamadas de condições de corrida.
  • 18. • O trecho de código no qual as diferentes threads acessam as variáveis compartilhadas (possivelmente, modificando-as) é chamado de seção crítica. • Resumindo: o código visto não é seguro para threads. • Para resolver o problema, transformaremos os trechos de acesso às variáveis compartilhadas em operações atômicas, impedindo que mais de uma thread execute tais instruções simultaneamente.
  • 19. EXEMPLO • Código do projeto Multithread2 alterado enviado por e-mail. • Nesse código, fizemos com que o código do método que adiciona um elemento ao SimpleArray seja atômico. Em Java, isso é feito usando a palavra- chave synchronized. • Quando uma thread está executando o corpo de um método synchronized, nenhuma outra pode executá-la antes da primeira terminar sua execução. • A instrução synchronized também pode ser utilizada para trechos de código.
  • 20. PRODUTOR-CONSUMIDOR • Um problema clássico da computação que envolve processos (ou threads) que produzem recursos para serem consumidos por outros. • Existe um buffer compartilhado para armazenamento dos recursos. O produtor precisa parar de produzir quando o buffer estiver cheio e o consumidor não pode consumir se não houver recurso disponível.
  • 21. ABORDAGEM 1 • Utilizar um buffer compartilhado com apenas uma posição (classe BufferSemSincronizacao). • Não há garantia sobre a ordem de execução das threads, logo, muitas vezes valores são produzidos com o buffer lotado ou, ainda, consumidos antes da produção, levando a resultados inconsistentes.
  • 22. ABORDAGEM 2 • Utilizar um buffer compartilhado com apenas uma posição, mas utilizando ArrayBlockingQueue (classe BufferBloqueante). • A classe ArrayBlockingQueue pertence ao pacote java.util.concurrent, segura para threads e que implementa a interface BlockingQueue (que estende a classe Queue) e declara os métodos put e take (equivalentes bloqueantes dos métodos offer e poll. • put coloca um elemento no fim da fila bloqueando se a mesma estiver cheia.
  • 23. • take retira um elemento do começo da fila bloqueando se a mesma estiver vazia. • O tamanho do ArrayBlockingQueue é passado como argumento para o construtor e não é aumentado dinamicamente.
  • 24. ABORDAGEM 3 • Utilizar um buffer compartilhado com apenas uma posição, mas utilizando métodos sincronizados (synchronized). • Utiliza uma variável booleana ocupado que indica se o buffer está totalmente ocupado ou não. • O produtor espera enquanto o buffer estiver lotado utilizando uma chamada ao método wait. Similarmente, o consumidor espera enquanto o buffer estiver vazio. • O método wait faz com que o objeto que o executou libere implicitamente o bloqueio sobre o buffer.
  • 25. • O produtor/consumidor só é liberado de sua espera quando for notificado de que o objeto compartilhado já foi utilizado; isso é feito com a chamada a notifyAll. • O método notifyAll retira do estado de espera todas as threads que estiverem esperando pelo objeto compartilhado, fazendo com que elas passem ao estado executável e tentem readquirir o bloqueio.
  • 26. ABORDAGEM 4 • Utilizar um buffer circular compartilhado com 4 posições. • Permite minimizar o tempo de espera das threads devido ao aumento das posições disponíveis para escrita e leitura. • Utiliza: • uma variável auxiliar para controlar quantos elementos válidos realmente há no buffer em um determinado momento. • Dois índices para indicar onde será feita a próxima leitura ou a próxima escrita.
  • 27. MULTITHREADING COM GUI • Aplicativos GUI são desafiantes para programação multithreaded. • Aplicativos swing possuem uma única thread, a thread de despacho de eventos, responsável por tratar as interações com os componentes GUI do aplicativo. • Todas as tarefas que exigem interação com a GUI do aplicativo são colocadas em uma fila de eventos e executadas em sequência pela thread de despacho de eventos.
  • 28. • Componentes GUI Swing não são seguros para threads. • Segurança para threads em aplicativos GUI é obtida assegurando que os componentes Swing são acessado a partir de uma única thread (a de despacho de eventos). Essa técnica é chamada de confinamento de thread. • Utilizando essa ideia, uma alternativa interessante é colocar as atividades de longa duração, que independem da interface enquanto são executadas, em threads separadas da de despacho de eventos.
  • 29. • Essa alternativa evita que a thread de despacho de eventos fique sem responder enquanto espera pelo resultado de tais atividades. • Para auxiliar na programação dessas atividades mais demoradas em threads separadas, o Java SE 6 fornece a classe SwingWorker. Essa classe pode realizar cálculos demorados e, então, atualizar s componentes Swing a partir da thread de despacho de eventos com base nos resultados dos cálculos. • SwingWorker implemente a interface Runnable.
  • 30. • Métodos comuns de SwingWorker: • doInBackground: define o cálculo longo na thread trabalhadora; • done: executado na thread de despacho de eventos quando doInBackground retorna; • execute: agenda o objeto SwingWorker a ser executado em uma thread trabalhadora; • get: espera a conclusão do cálculo e retorna o seu resultado; • publish: envia resultados intermediários dos cálculos para processamento na thread de despacho de eventos.
  • 31. • process: recebe os resultados intermediários e os processa na thread de despacho de eventos; • setProgress: configura a propriedade de progresso para notificar os ouvintes de alteração de propriedade na thread de despacho de eventos de atualizações da barra de progresso.
  • 32. EXEMPLO 1: FIBONACCI • No exemplo, forneceremos uma opção para calcular os termos da sequência de Fibonacci um a um ou para calcular um termo específico (até o 92º) em uma thread trabalhadora. • SwingWorker é uma classe genérica que recebe dois parâmetros: o primeiro é o tipo retornado pelo método doInBackground e o segundo é o tipo passado entre os métodos publish e process.
  • 33. EXEMPLO 2: ÍMPARES • No exemplo, calculamos todos os números ímpares menores que um valor inteiro fornecido como entrada. • Para obtenção dos ímpares, utilizamos o crivo de Eratóstenes. • Os resultados são exibidos em uma área de texto à medida em que são obtidos. • Uma barra de progresso mostra o quanto do cálculo já foi concluído até um determinado momento.
  • 34. REFERÊNCIAS • Java Como Programar – 8ª Edição. Deitel & Deitel.