SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
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.

Weitere ähnliche Inhalte

Was ist angesagt?

Escalonamento no Windows
Escalonamento no WindowsEscalonamento no Windows
Escalonamento no WindowsFee Kosta
 
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixCris Fidelix
 
Mutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosMutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosThiago Poiani
 
Reuso de software
Reuso de softwareReuso de software
Reuso de softwarerebekinha
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaLoiane Groner
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhanyKaren Costa
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Leinylson Fontinele
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivosFlávio Freitas
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockWellington Oliveira
 
Algoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoAlgoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoElaine Cecília Gatto
 
Trabalhando com Threads em JAVA
Trabalhando com Threads em JAVATrabalhando com Threads em JAVA
Trabalhando com Threads em JAVAMarcio Palheta
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01thomasdacosta
 
Modern Java Workshop
Modern Java WorkshopModern Java Workshop
Modern Java WorkshopSimon Ritter
 
Aula diagrama de estados 3º periodo uniao
Aula diagrama de estados 3º periodo uniaoAula diagrama de estados 3º periodo uniao
Aula diagrama de estados 3º periodo uniaoMaria Alice Jovinski
 

Was ist angesagt? (20)

THREADS EM JAVA: INTRODUÇÃO
THREADS EM JAVA: INTRODUÇÃOTHREADS EM JAVA: INTRODUÇÃO
THREADS EM JAVA: INTRODUÇÃO
 
Escalonamento no Windows
Escalonamento no WindowsEscalonamento no Windows
Escalonamento no Windows
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
 
SO-04 Escalonamento de Processos
SO-04 Escalonamento de ProcessosSO-04 Escalonamento de Processos
SO-04 Escalonamento de Processos
 
O compilador dev c++
O compilador dev c++O compilador dev c++
O compilador dev c++
 
Mutexes, Monitores e Semáforos
Mutexes, Monitores e SemáforosMutexes, Monitores e Semáforos
Mutexes, Monitores e Semáforos
 
Reuso de software
Reuso de softwareReuso de software
Reuso de software
 
Estrutura de repetição
Estrutura de repetiçãoEstrutura de repetição
Estrutura de repetição
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhany
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)
 
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
Tutorial dev cpp   001 - criação, leitura e alteração de arquivosTutorial dev cpp   001 - criação, leitura e alteração de arquivos
Tutorial dev cpp 001 - criação, leitura e alteração de arquivos
 
Sistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 DeadlockSistemas Operacionais Modernos Capítulo 3 Deadlock
Sistemas Operacionais Modernos Capítulo 3 Deadlock
 
Algoritmos - Lógica de Programação
Algoritmos - Lógica de ProgramaçãoAlgoritmos - Lógica de Programação
Algoritmos - Lógica de Programação
 
Trabalhando com Threads em JAVA
Trabalhando com Threads em JAVATrabalhando com Threads em JAVA
Trabalhando com Threads em JAVA
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Modern Java Workshop
Modern Java WorkshopModern Java Workshop
Modern Java Workshop
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
Aula diagrama de estados 3º periodo uniao
Aula diagrama de estados 3º periodo uniaoAula diagrama de estados 3º periodo uniao
Aula diagrama de estados 3º periodo uniao
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 
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
 

Ähnlich wie 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
 
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
 
Sistemas operacionais - aula8
Sistemas operacionais - aula8Sistemas operacionais - aula8
Sistemas operacionais - aula8
 

Kürzlich hochgeladen

Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2Maria Teresa Thomaz
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptPedro Luis Moraes
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfHELENO FAVACHO
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxAntonioVieira539017
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfHELENO FAVACHO
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTailsonSantos1
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxReinaldoMuller1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptjricardo76
 
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
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasSocorro Machado
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
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
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 

Kürzlich hochgeladen (20)

Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2Estudar, para quê?  Ciência, para quê? Parte 1 e Parte 2
Estudar, para quê? Ciência, para quê? Parte 1 e Parte 2
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Aula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.pptAula de jornada de trabalho - reforma.ppt
Aula de jornada de trabalho - reforma.ppt
 
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdfProjeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
Projeto de Extensão - ENGENHARIA DE SOFTWARE - BACHARELADO.pdf
 
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptxResponde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
Responde ou passa na HISTÓRIA - REVOLUÇÃO INDUSTRIAL - 8º ANO.pptx
 
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdfProjeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
Projeto de Extensão - DESENVOLVIMENTO BACK-END.pdf
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
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
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
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
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 

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.