SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
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.

Más contenido relacionado

La actualidad más candente

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
Ludimila Monjardim Casagrande
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
Adriano Teixeira de Souza
 

La actualidad más candente (20)

Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de Software
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Testes em uma arquitetura com messageria/streaming (Kafka)
Testes em uma arquitetura com messageria/streaming (Kafka)Testes em uma arquitetura com messageria/streaming (Kafka)
Testes em uma arquitetura com messageria/streaming (Kafka)
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
Aula01 - Logica de Programação
Aula01 - Logica de ProgramaçãoAula01 - Logica de Programação
Aula01 - Logica de Programação
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automação
 
Arquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introduçãoArquitetura Hexagonal: uma introdução
Arquitetura Hexagonal: uma introdução
 
Banco de questões qualidade de software
Banco de questões qualidade de softwareBanco de questões qualidade de software
Banco de questões qualidade de software
 
Linguagem Java
Linguagem JavaLinguagem Java
Linguagem Java
 
Git e GitHub - Conceitos Básicos
Git e GitHub - Conceitos BásicosGit e GitHub - Conceitos Básicos
Git e GitHub - Conceitos Básicos
 
Gestão de Produtos de Software - muito além do product ownership e das startups
Gestão de Produtos de Software - muito além do product ownership e das startupsGestão de Produtos de Software - muito além do product ownership e das startups
Gestão de Produtos de Software - muito além do product ownership e das startups
 
Tutorial Excel 2003 intermediário
Tutorial Excel 2003 intermediárioTutorial Excel 2003 intermediário
Tutorial Excel 2003 intermediário
 
Minicurso Shell Script
Minicurso Shell ScriptMinicurso Shell Script
Minicurso Shell Script
 
Unidade 1.4. os dispositivos de entrada e saida mais comuns
Unidade 1.4.   os dispositivos de entrada e saida mais comunsUnidade 1.4.   os dispositivos de entrada e saida mais comuns
Unidade 1.4. os dispositivos de entrada e saida mais comuns
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 

Destacado

Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222
Bianca Dantas
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
Bianca 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 Domains
ncct
 
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
Carlos 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 3
Carlos 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 1
Carlos Eduardo
 

Destacado (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
 

Similar a Aula sobre multithreading

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
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
Glaucio Scheibel
 

Similar 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

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
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
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.pdf
Autonoma
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
azulassessoria9
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
azulassessoria9
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
lenapinto
 

Último (20)

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...
 
Caderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdfCaderno de exercícios Revisão para o ENEM (1).pdf
Caderno de exercícios Revisão para o ENEM (1).pdf
 
INTERTEXTUALIDADE atividade muito boa para
INTERTEXTUALIDADE   atividade muito boa paraINTERTEXTUALIDADE   atividade muito boa para
INTERTEXTUALIDADE atividade muito boa para
 
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çã...
 
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
Considerando as pesquisas de Gallahue, Ozmun e Goodway (2013) os bebês até an...
 
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
 
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
 
Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024Historia de Portugal - Quarto Ano - 2024
Historia de Portugal - Quarto Ano - 2024
 
Educação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptxEducação Financeira - Cartão de crédito665933.pptx
Educação Financeira - Cartão de crédito665933.pptx
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Quiz | Dia da Europa 2024 (comemoração)
Quiz | Dia da Europa 2024  (comemoração)Quiz | Dia da Europa 2024  (comemoração)
Quiz | Dia da Europa 2024 (comemoração)
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
O estudo do controle motor nada mais é do que o estudo da natureza do movimen...
 
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
 
Expansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XVExpansão Marítima- Descobrimentos Portugueses século XV
Expansão Marítima- Descobrimentos Portugueses século XV
 
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.docGUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
GUIA DE APRENDIZAGEM 2024 9º A - História 1 BI.doc
 
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
 
Sistema de Bibliotecas UCS - Cantos do fim do século
Sistema de Bibliotecas UCS  - Cantos do fim do séculoSistema de Bibliotecas UCS  - Cantos do fim do século
Sistema de Bibliotecas UCS - Cantos do fim do século
 
Apresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União EuropeiaApresentação | Símbolos e Valores da União Europeia
Apresentação | Símbolos e Valores da União Europeia
 

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.