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

Más contenido relacionado

La actualidad más candente

MariaDB Optimization
MariaDB OptimizationMariaDB Optimization
MariaDB OptimizationJongJin Lee
 
Java Threads and Concurrency
Java Threads and ConcurrencyJava Threads and Concurrency
Java Threads and ConcurrencySunil OS
 
Programação orientada a objetos: herança
Programação orientada a objetos: herançaProgramação orientada a objetos: herança
Programação orientada a objetos: herançaIvan Ricarte
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKJosé Paumard
 
Java Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and ExampleJava Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and Examplekamal kotecha
 
Java Basics V3
Java Basics V3Java Basics V3
Java Basics V3Sunil OS
 
Java Foundations: Methods
Java Foundations: MethodsJava Foundations: Methods
Java Foundations: MethodsSvetlin Nakov
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK toolsHaribabu Nandyal Padmanaban
 
Threads V4
Threads  V4Threads  V4
Threads V4Sunil OS
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicasHelder da Rocha
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation ToolIzzet Mustafaiev
 
OCA Java SE 8 Exam Chapter 1 Java Building Blocks
OCA Java SE 8 Exam Chapter 1 Java Building BlocksOCA Java SE 8 Exam Chapter 1 Java Building Blocks
OCA Java SE 8 Exam Chapter 1 Java Building Blocksİbrahim Kürce
 
OCA Java SE 8 Exam Chapter 6 Exceptions
OCA Java SE 8 Exam Chapter 6 ExceptionsOCA Java SE 8 Exam Chapter 6 Exceptions
OCA Java SE 8 Exam Chapter 6 Exceptionsİbrahim Kürce
 

La actualidad más candente (20)

MariaDB Optimization
MariaDB OptimizationMariaDB Optimization
MariaDB Optimization
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Java Threads and Concurrency
Java Threads and ConcurrencyJava Threads and Concurrency
Java Threads and Concurrency
 
Generics
GenericsGenerics
Generics
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
Programação orientada a objetos: herança
Programação orientada a objetos: herançaProgramação orientada a objetos: herança
Programação orientada a objetos: herança
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
Java Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and ExampleJava Hibernate Programming with Architecture Diagram and Example
Java Hibernate Programming with Architecture Diagram and Example
 
Java Basics V3
Java Basics V3Java Basics V3
Java Basics V3
 
Java Foundations: Methods
Java Foundations: MethodsJava Foundations: Methods
Java Foundations: Methods
 
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
Performance Tuning -  Memory leaks, Thread deadlocks, JDK toolsPerformance Tuning -  Memory leaks, Thread deadlocks, JDK tools
Performance Tuning - Memory leaks, Thread deadlocks, JDK tools
 
Threads V4
Threads  V4Threads  V4
Threads V4
 
Threads 04 Variáveis atômicas
Threads 04 Variáveis atômicasThreads 04 Variáveis atômicas
Threads 04 Variáveis atômicas
 
Gradle - the Enterprise Automation Tool
Gradle  - the Enterprise Automation ToolGradle  - the Enterprise Automation Tool
Gradle - the Enterprise Automation Tool
 
POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
OCA Java SE 8 Exam Chapter 1 Java Building Blocks
OCA Java SE 8 Exam Chapter 1 Java Building BlocksOCA Java SE 8 Exam Chapter 1 Java Building Blocks
OCA Java SE 8 Exam Chapter 1 Java Building Blocks
 
OCA Java SE 8 Exam Chapter 6 Exceptions
OCA Java SE 8 Exam Chapter 6 ExceptionsOCA Java SE 8 Exam Chapter 6 Exceptions
OCA Java SE 8 Exam Chapter 6 Exceptions
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Introduction to OOP(in java) BY Govind Singh
Introduction to OOP(in java)  BY Govind SinghIntroduction to OOP(in java)  BY Govind Singh
Introduction to OOP(in java) BY Govind Singh
 

Destacado

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 versionadaLuiz Alberto Hespanha
 
Implementação de Sockets em JAVA
Implementação de Sockets em JAVAImplementação de Sockets em JAVA
Implementação de Sockets em JAVAMarcio Palheta
 
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 2012Marcio Palheta
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao PythonMarcio Palheta
 
Weka em aplicações java
Weka em aplicações javaWeka em aplicações java
Weka em aplicações javaMarcio Palheta
 
Conceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosConceitos Básicos de Objetos Distribuidos
Conceitos Básicos de Objetos DistribuidosDaniel Arndt Alves
 
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 ObjetosK19 Treinamentos
 
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 customizadosMarcio Palheta
 
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 2007Márcia Rocha
 
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 deviceMarcio Palheta
 
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 BackgroundMarcio Palheta
 
indicadores hospitalares
indicadores hospitalaresindicadores hospitalares
indicadores hospitalaresInformaGroup
 
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 qualifiersMarcio Palheta
 
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 temporoseanecordeiro
 
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 JSONMarcio Palheta
 

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

Similar a Trabalhando com Threads em JAVA

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
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - IIFabio Moura Pereira
 
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 IIFabio Moura Pereira
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - IFabio Moura Pereira
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
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 IFabio Moura Pereira
 
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 webValdir Junior
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
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
 
Introdução ao Node.js
Introdução ao Node.jsIntrodução ao Node.js
Introdução ao Node.jsEdgar Eler
 

Similar 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
 

Más de Marcio Palheta

Capítulo 12 - Fragments
Capítulo 12 - FragmentsCapítulo 12 - Fragments
Capítulo 12 - FragmentsMarcio Palheta
 
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ícitasMarcio Palheta
 
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 AlunoMarcio Palheta
 
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 SQLiteMarcio Palheta
 
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 telasMarcio Palheta
 
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 ProjetoMarcio Palheta
 
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 HelloWorldMarcio Palheta
 

Más 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

DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfIedaGoethe
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxLuizHenriquedeAlmeid6
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdfcartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdfIedaGoethe
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfEditoraEnovus
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasCassio Meira Jr.
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxIsabelaRafael2
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinhaMary Alvarenga
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
A experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxA experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxfabiolalopesmartins1
 
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirIedaGoethe
 

Último (20)

DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptxSlides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
Slides Lição 4, Betel, Ordenança quanto à contribuição financeira, 2Tr24.pptx
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
 
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdfcartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
cartilha-pdi-plano-de-desenvolvimento-individual-do-estudante.pdf
 
Simulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdfSimulado 1 Etapa - 2024 Proximo Passo.pdf
Simulado 1 Etapa - 2024 Proximo Passo.pdf
 
Programa de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades MotorasPrograma de Intervenção com Habilidades Motoras
Programa de Intervenção com Habilidades Motoras
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
Bullying - Texto e cruzadinha
Bullying        -     Texto e cruzadinhaBullying        -     Texto e cruzadinha
Bullying - Texto e cruzadinha
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
A experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptxA experiência amorosa e a reflexão sobre o Amor.pptx
A experiência amorosa e a reflexão sobre o Amor.pptx
 
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimir
 

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