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

Understanding Java Garbage Collection
Understanding Java Garbage CollectionUnderstanding Java Garbage Collection
Understanding Java Garbage CollectionAzul Systems Inc.
 
Discover Quarkus and GraalVM
Discover Quarkus and GraalVMDiscover Quarkus and GraalVM
Discover Quarkus and GraalVMRomain Schlick
 
Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVMRyan Cuprak
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerKoichi Sakata
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event LoopDesignveloper
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11 Knoldus Inc.
 
Curso Java Basico] Aula 19: Vetores (Arrays)
Curso Java Basico] Aula 19:  Vetores (Arrays)Curso Java Basico] Aula 19:  Vetores (Arrays)
Curso Java Basico] Aula 19: Vetores (Arrays)Loiane Groner
 

Mais procurados (20)

Understanding Java Garbage Collection
Understanding Java Garbage CollectionUnderstanding Java Garbage Collection
Understanding Java Garbage Collection
 
Java 8 date & time api
Java 8 date & time apiJava 8 date & time api
Java 8 date & time api
 
Dockerfile
Dockerfile Dockerfile
Dockerfile
 
Discover Quarkus and GraalVM
Discover Quarkus and GraalVMDiscover Quarkus and GraalVM
Discover Quarkus and GraalVM
 
Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVM
 
Java basics
Java basicsJava basics
Java basics
 
Java Collection Framework: lo que todo Java Dev debe conocer
Java Collection Framework: lo que todo Java Dev debe conocerJava Collection Framework: lo que todo Java Dev debe conocer
Java Collection Framework: lo que todo Java Dev debe conocer
 
Quarkus k8s
Quarkus   k8sQuarkus   k8s
Quarkus k8s
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT Compiler
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
Net core
Net coreNet core
Net core
 
JavaScript Event Loop
JavaScript Event LoopJavaScript Event Loop
JavaScript Event Loop
 
WebAssembly Overview
WebAssembly OverviewWebAssembly Overview
WebAssembly Overview
 
JVM Under The Hood WDI.pdf
JVM Under The Hood WDI.pdfJVM Under The Hood WDI.pdf
JVM Under The Hood WDI.pdf
 
Go Lang Tutorial
Go Lang TutorialGo Lang Tutorial
Go Lang Tutorial
 
GraalVM
GraalVMGraalVM
GraalVM
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Introduction to Java 11
Introduction to Java 11 Introduction to Java 11
Introduction to Java 11
 
Curso Java Basico] Aula 19: Vetores (Arrays)
Curso Java Basico] Aula 19:  Vetores (Arrays)Curso Java Basico] Aula 19:  Vetores (Arrays)
Curso Java Basico] Aula 19: Vetores (Arrays)
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 

Destaque

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
 

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

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
 

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

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
 

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

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 tecniCleidianeCarvalhoPer
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteVanessaCavalcante37
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTailsonSantos1
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
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.pdfHELENO FAVACHO
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorEdvanirCosta
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
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.pptxLusGlissonGud
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
"É 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...Rosalina Simão Nunes
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇJaineCarolaineLima
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfcomercial400681
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxkellyneamaral
 
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
 

Último (20)

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
 
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
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
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
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
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
 
INTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de ProfessorINTERVENÇÃO PARÁ - Formação de Professor
INTERVENÇÃO PARÁ - Formação de Professor
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
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
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
"É 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...
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
 
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
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docx
 
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...
 

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