SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Java Standard Edition (JSE)
           14.Threads




        Esp. Márcio Palheta
 Gtalk: marcio.palheta@gmail.com
                                   1
Agenda
 Conceitos de programação concorrente
 Estendendo Thread;
 Troca de contextos;
 Garbage Collector;
 Problemas de concorrência;
 Sincronização;
 Monitores de concorrência;
                                        2
Processamento paralelo
 Há situações em que precisamos
 executar duas coisas ao mesmo tempo;
 Podemos, por exemplo, mostrar uma
 barra de progresso enquanto
 esperamos a montagem de um relatório
 Em java, quando falamos de
 processamento paralelo, falamos de
 Threads;
                                    3
java.lang.Thread
 Essa classe permite a criação de linhas
 execução paralelas;
 Como fica o paralelismo quando temos
 apenas um processador?
 A classe Thread recebe como
 argumento um objeto com o código a
 ser executado;
 Esse objeto deve ser um Runnable;
                                           4
java.lang.Runnable
 Interface que define apenas o método:
   public abstract void run();
 O método Runnable.run() é utilizado
 quando do início de uma Thread;
 O método Thread.start() determina o
 início da execução de uma determinada
 thread;

                                         5
Exercício 01
 Crie a classe GeradorRelatorio, que
 contem o código a ser executado por
 uma thread:




                                       6
Exercício 02
 Implemente o código para Criação e
 execução de uma Thread, usando um
 objeto GeradorRelatorio:




                                      7
Entendendo os códigos
 No exercício 01, foi criada a classe
 GeradorRelatorio, que implementa
 Runnable;
 No exercício 02, criamos uma Thread
 que, ao iniciar(thread.start()), invoca o
 método GeradorRelatorio.run();
 Qual o resultado gerado pelo próximo
 exercício?

                                             8
Exercício 03
 Altere o código de execução de thread,
 desenvolvido no exercício anterior,
 incluindo a mensagem final:




                                          9
Resultado da execução
Por que a mensagem final aparece antes
da execução da Thread?
Thread == novo processo independente




                                     10
Execução de várias Threads
 Vimos que as Threads agem como
 processos independentes;
 Podemos solicitar a execução de vários
 processos ao mesmo tempo -
 Multithread;
 Vamos criar uma Thread para “exibir”
 uma mensagem, enquanto o relatório é
 processado;
                                      11
Exercício 04
 Crie a classe BarraDeProgresso, que
 será executada por uma Thread,
 durante a impressão do relatório:




                                       12
Exercício 05
 Agora, nossa aplicação deve imprimir o
 relatório e exibir a barra, ao mesmo
 tempo:




                                          13
Resultado gerado
 Os processo concorrem por tempo de
 execução no processador;
 As regras de escalonamento definem o
 tempo de execução de cada processo;




                                        14
Entendendo os conceitos
É serviço do escalonador de threads(scheduler)
alternar o tempo de execução de cada Thread
iniciada(start)
A troca de contexto ocorre quando o escalonador
salva o estado da thread atual, para recuperar
depois, e pára sua execução;
Neste momento, é iniciada uma nova thread ;
ou é recuperado o estado de outra que estava
parada, voltando a executar;
                                              15
Interrupção de execução
 Imagine que temos a necessidade de
 imprimir os nomes das frutas de um
 cesto;
 Queremos “dar um tempo” para a
 leitura dos usuário;
 Com isso, precisamos que, após a
 impressão de um nome, seja realizada
 um pausa na execução;
 Para isso, usamos Thread.sleep(tempo)
                                     16
Exercício 06 – Crie a cesta de
frutas




                                 17
Exercício 07
Implemente e execute o código a seguir;
Qual o resultado?




                                      18
Herança com Thread
 Consultando a documentação java,
 verificamos que a classe Thread
 implementa Runnable;
 Isso nos permite criar uma classe filha
 de Thread e sobrescrever o método
 run();
 Isso nos permite colocar na mesma
 classe o executor e o executado;
                                           19
Exercício 08
 Implemente a herança de Threads




                                   20
Comentando o código
 É mais fácil criar uma classe filha de
 Thread do que que usar um objeto
 Runnable;
 Mas não é uma boa prática estender
 uma Thread;
 Com extends Thread, nossa classe
 ficaria muito limitada, não podendo
 herdar os componentes de outra;
                                          21
Garbage Collector
 O Garbage Collector (coletor de lixo) é
 uma Thread responsável por jogar fora
 todos os objetos que não estão sendo
 referenciados;
 Imaginemos o código a seguir:




                                           22
De olho no código
 Com a execução do item 1, são criados
 dois objetos ContaBancaria e atribuídos
 às referências conta1 e conta2;
 No item 2, as duas referências passam
 a apontar para o mesmo objeto;
 Neste momento, quantos objetos
 existem na memória? Um ou dois?
 Perdemos a referência a um dos
 objetos;
                                       23
Entendendo os conceitos
 O objeto sem referência não pode mais
 ser acessado;
 Podemos afirmar que ele saiu da
 memória?
 Como Garbage Collector é uma Thread,
 por ser executado a qualquer momento;
 Com isso, dizemos que o objeto sem
 referência está disponível para coleta;
                                      24
System.gc()
 Você consegue executar o Garbage
 Collector;
 Mas chamando o método estático
 System.gc() você está sugerindo que a
 JVM rode o Garbage Collector naquele
 momento;
 Sua sugestão pode ser aceita ou não;
 Você não deve basear sua aplicação na
 execução do Garbage Collector;        25
Problemas de concorrência
 Imagine que temos um Banco deve
 possuir milhões de contas do tipo
 poupança;
 Todo dia 10 de cada mês, precisamos
 atualizar o saldo da poupança em 1%;
 Nesse dia, é executada uma thread que
 carrega a coleção de contas do banco e
 executa o método atualizar();
                                      26
Métodos de ContaBancaria
 Vamos pensar na seguinte
 implementação para os métodos
 depositar() e atualizar():




                                 27
Cenário do caos:
 Imagine uma Conta com saldo de 100 reais.
 Um cliente entra na agência e faz um
 depósito de 1000 reais.
 Isso dispara uma Thread no banco que
 chama o método deposita(); ele começa
 calculando o novoSaldo que
 passa a ser 1100 (novoSaldo = this.saldo + valor). Só
 que por algum motivo que desconhecemos, o
 escalonador pára essa thread.
                                                     28
Cenário do caos – cont...
Neste exato instante, ele começa a executar uma
outra Thread que chama o método atualiza da
mesma Conta, por exemplo, com taxa de 1%. Isso
quer dizer que o novoSaldo passa a valer 101 reais
(saldoAtualizado = this.saldo * (1 + taxa)).
Neste instante o escalonador troca de Threads
novamente. Agora ele executa (this.saldo = novoSaldo) na
Thread que fazia o depósito; o saldo passa a valer
R$ 1100,00.
Acabando o deposita(), o escalonador volta pra
Thread do atualiza() e executa(this.saldo = saldoAtualizado),
fazendo o saldo valer R$ 101,00.
                                                            29
Resultado do caos
O depósito de mil reais foi ignorado e seu
Cliente ficará pouco feliz com isso;
O problema, foi o acesso simultâneo de
duas Threads ao mesmo objeto.
Dizemos que essa classe não é thread
safe, isso é, não está pronta para ter uma
instância utilizada entre várias threads
concorrentes;
                                         30
Região crítica
 Esses métodos não deveriam ser
 acessados por duas threads, ao mesmo
 tempo;
 Região crítica é o trecho de código que
 apenas uma thread pode acessar por
 vez;
 Como bloquear o acesso concorrente a
 um método?
                                       31
O modificador de acesso
synchronized
 Métodos syncronized só podem ser
 acessados por uma thread por vez;




 Uma thread espera o fim da execução
 de outra que iniciou primeiro;
                                       32
Vector e Hashtable
 Duas collections muito famosas são
 Vector e Hashtable;
 Essas coleções são Thread safe, ao
 contrário de suas irmãs ArrayList e
 HashMap;
 Por que não usamos sempre classes
 thread safe?
 Devido ao custo da operação;
                                       33
Bibliografia
 Java - Como programar, de Harvey M.
 Deitel
  Use a cabeça! - Java, de Bert Bates e
 Kathy Sierra
  (Avançado) Effective Java
 Programming Language Guide, de Josh
 Bloch

                                      34
Referências WEB
  SUN: www.java.sun.com
  Threads:
  http://download.oracle.com/javase/tutorial
  /essential/concurrency/
Fóruns e listas:
  Javaranch: www.javaranch.com
  GUJ: www.guj.com.br

Apostilas:
 Argonavis: www.argonavis.com.br
 Caelum: www.caelum.com.br
                                               35
Java Standard Edition (JSE)
           14. Threads




        Esp. Márcio Palheta
 Gtalk: marcio.palheta@gmail.com
                                   36

Mais conteúdo relacionado

Mais procurados

Processos e threads
Processos e threadsProcessos e threads
Processos e threads
Silvino Neto
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
Adriano Teixeira de Souza
 

Mais procurados (20)

Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Testing Angular
Testing AngularTesting Angular
Testing Angular
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threads
 
Threads 06: Coleções concorrentes
Threads 06: Coleções concorrentesThreads 06: Coleções concorrentes
Threads 06: Coleções concorrentes
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threads
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
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
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Angular Unit Testing
Angular Unit TestingAngular Unit Testing
Angular Unit Testing
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Python programming : Threads
Python programming : ThreadsPython programming : Threads
Python programming : Threads
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
Aula 3 introducao a orientação a objetos
Aula 3   introducao a orientação a objetosAula 3   introducao a orientação a objetos
Aula 3 introducao a orientação a objetos
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Learning React - I
Learning React - ILearning React - I
Learning React - I
 
Unit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma introUnit testing JavaScript: Jasmine & karma intro
Unit testing JavaScript: Jasmine & karma intro
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
Angular Unit Testing
Angular Unit TestingAngular Unit Testing
Angular Unit Testing
 
Java básico - Módulo 04: Estruturas de controle
Java   básico - Módulo 04:  Estruturas de controleJava   básico - Módulo 04:  Estruturas de controle
Java básico - Módulo 04: Estruturas de controle
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 

Destaque

Palestra ministrada na Feira Norte do Estudante 2012
Palestra ministrada na Feira Norte do Estudante 2012Palestra ministrada na Feira Norte do Estudante 2012
Palestra ministrada na Feira Norte do Estudante 2012
Marcio Palheta
 
indicadores hospitalares
indicadores hospitalaresindicadores hospitalares
indicadores hospitalares
InformaGroup
 
Distribuição das doenças no espaço e no tempo
Distribuição das doenças no espaço e no tempoDistribuição das doenças no espaço e no tempo
Distribuição das doenças no espaço e no tempo
roseanecordeiro
 

Destaque (20)

Datomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionadaDatomic - Lidando com dados de maneira versionada
Datomic - Lidando com dados de maneira versionada
 
Implementação de Sockets em JAVA
Implementação de Sockets em JAVAImplementação de Sockets em JAVA
Implementação de Sockets em JAVA
 
Palestra ministrada na Feira Norte do Estudante 2012
Palestra ministrada na Feira Norte do Estudante 2012Palestra ministrada na Feira Norte do Estudante 2012
Palestra ministrada na Feira Norte do Estudante 2012
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Weka em aplicações java
Weka em aplicações javaWeka em aplicações java
Weka em aplicações java
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos Distribuidos
 
Apostila de Java: Orientação a Objetos
Apostila de Java: Orientação a ObjetosApostila de Java: Orientação a Objetos
Apostila de Java: Orientação a Objetos
 
Qualidade em serviços de saúde indicadores
Qualidade em serviços de saúde indicadoresQualidade em serviços de saúde indicadores
Qualidade em serviços de saúde indicadores
 
Capítulo 08 - desenvolvimento de layouts customizados
Capítulo 08 - desenvolvimento de layouts customizadosCapítulo 08 - desenvolvimento de layouts customizados
Capítulo 08 - desenvolvimento de layouts customizados
 
Guia metodologicos de doenças crônicas 2007
Guia metodologicos de doenças crônicas 2007Guia metodologicos de doenças crônicas 2007
Guia metodologicos de doenças crônicas 2007
 
Instrumentos de avaliação dos indicadores de Saúde da Pessoa Idosa: uma exper...
Instrumentos de avaliação dos indicadores de Saúde da Pessoa Idosa: uma exper...Instrumentos de avaliação dos indicadores de Saúde da Pessoa Idosa: uma exper...
Instrumentos de avaliação dos indicadores de Saúde da Pessoa Idosa: uma exper...
 
Curriculum lattes
Curriculum lattesCurriculum lattes
Curriculum lattes
 
Cv em power point atualizado
Cv em power point atualizadoCv em power point atualizado
Cv em power point atualizado
 
Capítulo 07 - Acesso a câmera e arquivos armazenados no device
Capítulo 07 - Acesso a câmera e arquivos armazenados no deviceCapítulo 07 - Acesso a câmera e arquivos armazenados no device
Capítulo 07 - Acesso a câmera e arquivos armazenados no device
 
Capítulo 09 - Serviços em Background
Capítulo 09 - Serviços em BackgroundCapítulo 09 - Serviços em Background
Capítulo 09 - Serviços em Background
 
indicadores hospitalares
indicadores hospitalaresindicadores hospitalares
indicadores hospitalares
 
Capítulo 11 - Melhorando a usabilidade com qualifiers
Capítulo 11 - Melhorando a usabilidade com qualifiersCapítulo 11 - Melhorando a usabilidade com qualifiers
Capítulo 11 - Melhorando a usabilidade com qualifiers
 
Distribuição das doenças no espaço e no tempo
Distribuição das doenças no espaço e no tempoDistribuição das doenças no espaço e no tempo
Distribuição das doenças no espaço e no tempo
 
Capítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSONCapítulo 10 - Sincronização de dados usando JSON
Capítulo 10 - Sincronização de dados usando JSON
 
Indicadores Hospitalares
Indicadores HospitalaresIndicadores Hospitalares
Indicadores Hospitalares
 

Semelhante a Trabalhando com Threads em JAVA

Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
Denis L Presciliano
 

Semelhante a Trabalhando com Threads em JAVA (20)

Java memory model primary ref. - faq
Java memory model   primary ref. - faqJava memory model   primary ref. - faq
Java memory model primary ref. - faq
 
12 threads
12 threads12 threads
12 threads
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Conhecendo o Spring
Conhecendo o SpringConhecendo o Spring
Conhecendo o Spring
 
Threads em java
Threads em javaThreads em java
Threads em java
 
Aula java[1]
Aula java[1]Aula java[1]
Aula java[1]
 
Mvc model view controller - java para desenvolvimento web
Mvc   model view controller - java para desenvolvimento webMvc   model view controller - java para desenvolvimento web
Mvc model view controller - java para desenvolvimento web
 
Java 13
Java 13Java 13
Java 13
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
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
 
Java 01
Java 01Java 01
Java 01
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.js
 
Net - Threads
Net - ThreadsNet - Threads
Net - Threads
 
Linguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação JavaLinguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação Java
 

Mais de Marcio Palheta

Mais de Marcio Palheta (7)

Capítulo 12 - Fragments
Capítulo 12 - FragmentsCapítulo 12 - Fragments
Capítulo 12 - Fragments
 
Capítulo 06 - Comunicação entre Activities e Intents Implícitas
Capítulo 06 - Comunicação entre Activities e Intents ImplícitasCapítulo 06 - Comunicação entre Activities e Intents Implícitas
Capítulo 06 - Comunicação entre Activities e Intents Implícitas
 
Capítulo 05 - Menus de Contexto e Exclusão de Aluno
Capítulo 05 - Menus de Contexto e Exclusão de AlunoCapítulo 05 - Menus de Contexto e Exclusão de Aluno
Capítulo 05 - Menus de Contexto e Exclusão de Aluno
 
Capítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLiteCapítulo 04 - Persistência de dados com SQLite
Capítulo 04 - Persistência de dados com SQLite
 
Capítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telasCapítulo 03 - Formulários, menus e navegação entre telas
Capítulo 03 - Formulários, menus e navegação entre telas
 
Capítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de ProjetoCapítulo 02 - Cadastro de Alunos e Decisões de Projeto
Capítulo 02 - Cadastro de Alunos e Decisões de Projeto
 
Capítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldCapítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorld
 

Último

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
TailsonSantos1
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
LusGlissonGud
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
WagnerCamposCEA
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
LeloIurk1
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
TailsonSantos1
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
azulassessoria9
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
CleidianeCarvalhoPer
 

Último (20)

PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
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 sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.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
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
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
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.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
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 

Trabalhando com Threads em JAVA

  • 1. Java Standard Edition (JSE) 14.Threads Esp. Márcio Palheta Gtalk: marcio.palheta@gmail.com 1
  • 2. Agenda Conceitos de programação concorrente Estendendo Thread; Troca de contextos; Garbage Collector; Problemas de concorrência; Sincronização; Monitores de concorrência; 2
  • 3. Processamento paralelo Há situações em que precisamos executar duas coisas ao mesmo tempo; Podemos, por exemplo, mostrar uma barra de progresso enquanto esperamos a montagem de um relatório Em java, quando falamos de processamento paralelo, falamos de Threads; 3
  • 4. java.lang.Thread Essa classe permite a criação de linhas execução paralelas; Como fica o paralelismo quando temos apenas um processador? A classe Thread recebe como argumento um objeto com o código a ser executado; Esse objeto deve ser um Runnable; 4
  • 5. java.lang.Runnable Interface que define apenas o método: public abstract void run(); O método Runnable.run() é utilizado quando do início de uma Thread; O método Thread.start() determina o início da execução de uma determinada thread; 5
  • 6. Exercício 01 Crie a classe GeradorRelatorio, que contem o código a ser executado por uma thread: 6
  • 7. Exercício 02 Implemente o código para Criação e execução de uma Thread, usando um objeto GeradorRelatorio: 7
  • 8. Entendendo os códigos No exercício 01, foi criada a classe GeradorRelatorio, que implementa Runnable; No exercício 02, criamos uma Thread que, ao iniciar(thread.start()), invoca o método GeradorRelatorio.run(); Qual o resultado gerado pelo próximo exercício? 8
  • 9. Exercício 03 Altere o código de execução de thread, desenvolvido no exercício anterior, incluindo a mensagem final: 9
  • 10. Resultado da execução Por que a mensagem final aparece antes da execução da Thread? Thread == novo processo independente 10
  • 11. Execução de várias Threads Vimos que as Threads agem como processos independentes; Podemos solicitar a execução de vários processos ao mesmo tempo - Multithread; Vamos criar uma Thread para “exibir” uma mensagem, enquanto o relatório é processado; 11
  • 12. Exercício 04 Crie a classe BarraDeProgresso, que será executada por uma Thread, durante a impressão do relatório: 12
  • 13. Exercício 05 Agora, nossa aplicação deve imprimir o relatório e exibir a barra, ao mesmo tempo: 13
  • 14. Resultado gerado Os processo concorrem por tempo de execução no processador; As regras de escalonamento definem o tempo de execução de cada processo; 14
  • 15. Entendendo os conceitos É serviço do escalonador de threads(scheduler) alternar o tempo de execução de cada Thread iniciada(start) A troca de contexto ocorre quando o escalonador salva o estado da thread atual, para recuperar depois, e pára sua execução; Neste momento, é iniciada uma nova thread ; ou é recuperado o estado de outra que estava parada, voltando a executar; 15
  • 16. Interrupção de execução Imagine que temos a necessidade de imprimir os nomes das frutas de um cesto; Queremos “dar um tempo” para a leitura dos usuário; Com isso, precisamos que, após a impressão de um nome, seja realizada um pausa na execução; Para isso, usamos Thread.sleep(tempo) 16
  • 17. Exercício 06 – Crie a cesta de frutas 17
  • 18. Exercício 07 Implemente e execute o código a seguir; Qual o resultado? 18
  • 19. Herança com Thread Consultando a documentação java, verificamos que a classe Thread implementa Runnable; Isso nos permite criar uma classe filha de Thread e sobrescrever o método run(); Isso nos permite colocar na mesma classe o executor e o executado; 19
  • 20. Exercício 08 Implemente a herança de Threads 20
  • 21. Comentando o código É mais fácil criar uma classe filha de Thread do que que usar um objeto Runnable; Mas não é uma boa prática estender uma Thread; Com extends Thread, nossa classe ficaria muito limitada, não podendo herdar os componentes de outra; 21
  • 22. Garbage Collector O Garbage Collector (coletor de lixo) é uma Thread responsável por jogar fora todos os objetos que não estão sendo referenciados; Imaginemos o código a seguir: 22
  • 23. De olho no código Com a execução do item 1, são criados dois objetos ContaBancaria e atribuídos às referências conta1 e conta2; No item 2, as duas referências passam a apontar para o mesmo objeto; Neste momento, quantos objetos existem na memória? Um ou dois? Perdemos a referência a um dos objetos; 23
  • 24. Entendendo os conceitos O objeto sem referência não pode mais ser acessado; Podemos afirmar que ele saiu da memória? Como Garbage Collector é uma Thread, por ser executado a qualquer momento; Com isso, dizemos que o objeto sem referência está disponível para coleta; 24
  • 25. System.gc() Você consegue executar o Garbage Collector; Mas chamando o método estático System.gc() você está sugerindo que a JVM rode o Garbage Collector naquele momento; Sua sugestão pode ser aceita ou não; Você não deve basear sua aplicação na execução do Garbage Collector; 25
  • 26. Problemas de concorrência Imagine que temos um Banco deve possuir milhões de contas do tipo poupança; Todo dia 10 de cada mês, precisamos atualizar o saldo da poupança em 1%; Nesse dia, é executada uma thread que carrega a coleção de contas do banco e executa o método atualizar(); 26
  • 27. Métodos de ContaBancaria Vamos pensar na seguinte implementação para os métodos depositar() e atualizar(): 27
  • 28. Cenário do caos: Imagine uma Conta com saldo de 100 reais. Um cliente entra na agência e faz um depósito de 1000 reais. Isso dispara uma Thread no banco que chama o método deposita(); ele começa calculando o novoSaldo que passa a ser 1100 (novoSaldo = this.saldo + valor). Só que por algum motivo que desconhecemos, o escalonador pára essa thread. 28
  • 29. Cenário do caos – cont... Neste exato instante, ele começa a executar uma outra Thread que chama o método atualiza da mesma Conta, por exemplo, com taxa de 1%. Isso quer dizer que o novoSaldo passa a valer 101 reais (saldoAtualizado = this.saldo * (1 + taxa)). Neste instante o escalonador troca de Threads novamente. Agora ele executa (this.saldo = novoSaldo) na Thread que fazia o depósito; o saldo passa a valer R$ 1100,00. Acabando o deposita(), o escalonador volta pra Thread do atualiza() e executa(this.saldo = saldoAtualizado), fazendo o saldo valer R$ 101,00. 29
  • 30. Resultado do caos O depósito de mil reais foi ignorado e seu Cliente ficará pouco feliz com isso; O problema, foi o acesso simultâneo de duas Threads ao mesmo objeto. Dizemos que essa classe não é thread safe, isso é, não está pronta para ter uma instância utilizada entre várias threads concorrentes; 30
  • 31. Região crítica Esses métodos não deveriam ser acessados por duas threads, ao mesmo tempo; Região crítica é o trecho de código que apenas uma thread pode acessar por vez; Como bloquear o acesso concorrente a um método? 31
  • 32. O modificador de acesso synchronized Métodos syncronized só podem ser acessados por uma thread por vez; Uma thread espera o fim da execução de outra que iniciou primeiro; 32
  • 33. Vector e Hashtable Duas collections muito famosas são Vector e Hashtable; Essas coleções são Thread safe, ao contrário de suas irmãs ArrayList e HashMap; Por que não usamos sempre classes thread safe? Devido ao custo da operação; 33
  • 34. Bibliografia Java - Como programar, de Harvey M. Deitel Use a cabeça! - Java, de Bert Bates e Kathy Sierra (Avançado) Effective Java Programming Language Guide, de Josh Bloch 34
  • 35. Referências WEB SUN: www.java.sun.com Threads: http://download.oracle.com/javase/tutorial /essential/concurrency/ Fóruns e listas: Javaranch: www.javaranch.com GUJ: www.guj.com.br Apostilas: Argonavis: www.argonavis.com.br Caelum: www.caelum.com.br 35
  • 36. Java Standard Edition (JSE) 14. Threads Esp. Márcio Palheta Gtalk: marcio.palheta@gmail.com 36