Documente Academic
Documente Profesional
Documente Cultură
CAPTULO 17
17.1 - THREADS
"Duas tarefas ao mesmo tempo"
Em vrias situaes, precisamos "rodar duas coisas ao mesmo tempo". Imagine
um programa que gera um relatrio muito grande em PDF. um processo
demorado e, para dar alguma satisfao para o usurio, queremos mostrar uma
barra de progresso. Queremos ento gerar o PDF e ao mesmo tempo atualizar a
barrinha.
Pensando um pouco mais amplamente, quando usamos o computador tambm
fazemos vrias coisas simultaneamente: queremos navegar na internet e ao
1/11
7/10/2014
Threads em Java
Em Java, usamos a classe Thread do pacote java.lang para criarmos linhas de
O cdigo acima, porm, no compilar. Como a classe Thread sabe que deve
chamar o mtodo roda? Como ela sabe que nome de mtodo daremos e que ela
deve chamar esse mtodo especial? Falta na verdade um contrato entre as nossas
classes a serem executadas e a classe Thread.
Esse contrato existe e feito pela interfaceRunnable: devemos dizer que nossa
classe "executvel" e que segue esse contrato. Na interface Runnable, h apenas
um mtodo chamado run. Basta implement-lo, "assinar" o contrato e a classe
2/11
7/10/2014
Apesar de ser um cdigo mais simples, voc est usando herana apenas
por "preguia" (herdamos um monte de mtodos mas usamos apenas o
Dormindo
Para que a thread atual durma basta chamar o mtodo a seguir, por
exemplo, para dormir 3 segundos:
http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/#17-5-e-as-classes-anonimas
3/11
7/10/2014
Thread.sleep(3 * 1000);
uma classe que implementa Runnable e, no mtodo run, apenas imprime dez
mil nmeros. Vamos us-las duas vezes para criar duas threads e imprimir os
nmeros duas vezes simultaneamente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
4/11
7/10/2014
E em mais de um processador?
A VM do Java e a maioria dos SOs modernos consegue fazer proveito de
sistemas com vrios processadores ou multi-core. A diferena que agora
temos mais de um processador executando coisas e teremos, sim, execues
verdadeiramente paralelas.
http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/#17-5-e-as-classes-anonimas
5/11
7/10/2014
Collector no pode eliminar nenhum dos objetos, pois ainda tem algum se
referindo a eles de alguma forma.
Podemos, ento, executar uma linha que nos faa perder a referncia para um
dos dois objetos criados, como, por exemplo, o seguinte cdigo:
conta2 = conta1;
6/11
7/10/2014
quando ele vai rodar. Voc s sabe que, em algum momento no futuro, aquela
memria vai ser liberada.
Algumas pessoas costumam atribuir null a uma varivel, com o intuito de
acelerar a passagem do Garbage Collector por aquele objeto:
for (int i = 0; i < 100; i++) {
List x = new ArrayList();
// faz algumas coisas com a arraylist
x = null;
}
System.gc()
Voc nunca consegue forar o Garbage Collector, mas chamando o mtodo
esttico gc da classe System, voc est sugerindo que a Virtual Machine rode
o Garbage Collector naquele momento. Se sua sugesto vai ser aceita ou
no, isto depende de JVM para JVM, e voc no tem garantias. Evite o uso
deste mtodo. Voc no deve basear sua aplicao em quando o Garbage
Collector vai rodar ou no.
Finalizer
A classe Object define tambm um mtodo finalize, que voc pode
reescrever. Esse mtodo ser chamado no instante antes do Garbage
Collector coletar este objeto. No um destrutor, voc no sabe em que
momento ele ser chamado. Algumas pessoas o utilizam para liberar
recursos "caros" como conexes, threads e recursos nativos. Isso deve ser
utilizado apenas por segurana: o ideal liberar esses recursos o mais
rpido possvel, sem depender da passagem do Garbage Collector.
17.4 - EXERCCIOS
1. Teste o exemplo deste captulo para imprimir nmeros em paralelo.
http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/#17-5-e-as-classes-anonimas
7/11
7/10/2014
http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/#17-5-e-as-classes-anonimas
8/11
7/10/2014
9/11
7/10/2014
CAPTULO ANTERIOR:
Collections framework
PRXIMO CAPTULO:
E agora?
http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/#17-5-e-as-classes-anonimas
10/11
7/10/2014
Blog Caelum
Cursos Online
Newsletter
Casa do Cdigo
http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/#17-5-e-as-classes-anonimas
11/11