Beruflich Dokumente
Kultur Dokumente
Tpicos Especiais I
Introduo
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 mesmo tempo ouvir msica.
A necessidade de se fazer vrias coisas simultaneamente, ao
mesmo tempo, paralelamente, aparece frequentemente na
computao. Para vrios programas distintos, normalmente o prprio
sistema operacional gerencia isso atravs de vrios processos em
paralelo.
Em um programa s (um processo s), se queremos executar
coisas em paralelo, normalmente falamos de Threads.
2 /24
Threads
uma forma de um processo dividir a si mesmo em
duas ou mais tarefas que podem ser executadas
concorrencialmente. O suporte thread fornecido pelo
prprio sistema operacional, no caso da linha de execuo
ao nvel do ncleo (em ingls: Kernel-Level Thread (KLT)),
ou implementada atravs de uma biblioteca de uma
determinada linguagem, no caso de uma User-Level
Thread (ULT).
3 /24
Thread x Processos
Thread
Processo
Mais Leve
Mais Pesado
Recursos compartilhados
Enderecamento compartilhado
Endereamento Prprio
4 /24
6 /24
Implementao de Threads
Nas linguagens de programao o uso de Threads
pacote
java.lang.Thread,
que
uma
7 /24
Exemplo Thread em C
8 /24
10 /24
11 /24
13 /24
14 /24
15 /24
Sincronizao de Threads
Duas ou mais Threads dentro de um programa podem
acessar ou modificar um mesmo recurso ou dado, isto
pode produzir um resultado imprevisto e errado devido ao
problema da concorrncia.
Desta forma, sincronizar Threads necessrio para
17 /24
Sincronizao de Threads
Existem algumas tcnicas para sincronizar Threads
18 /24
sincronizados
sincronizados
Mtodos sincronizados
19 /24
Bloco sincronizado
public class TwoCounters {
private long c1 = 0, c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void inc1() {
synchronized(lock1) {
c1++;
}
}
public void inc2() {
synchronized(lock2) {
c2++;
}
}
}
20 /24
21 /24
22 /24
23 /24
http://pt.slideshare.net/marciopalheta/trabalhando-com-threads-em-java
http://pt.wikipedia.org/wiki/Thread_(ci%C3%AAncia_da_computa%C3%A7%
C3%A3o)
24 /24