View
54
Download
0
Category
Preview:
DESCRIPTION
Threads Concorrência em Java
Citation preview
Engenharia de ComputaoTpicos Especiais I
Programao concorrente: Threads
Prof. Jan Erik Natal, 2015.1
Introduo
2 /24
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.
Threads
3 /24
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).
Thread x Processos
4 /24
Thread Processo
Mais Leve Mais Pesado
Recursos compartilhados Recursos Prprios(I/O, ...)
Enderecamento compartilhado Endereamento Prprio
Ambiente de execuo Compartilhada Ambiente de Execuo prprio
Existe dentro de um Processo Possui ao menos um thread
Vantagens de usar Threads
5 /24
A criao e terminao de uma thread nova em geral
mais rpida do que a criao e terminao de um
processo novo;
A comutao de contexto entre duas threads mais
rpido do que entre dois processos;
menos custoso gerenciar threads do que processos;
Pode prover melhora na performance
Mltiplas Threads podem compartilhar recursos
Utiliza multiprocessadores se disponvel
Processo Mono e MultiThreads
6 /24
Implementao de Threads
7 /24
Nas linguagens de programao o uso de Threads
feito utilizando bibliotecas:
Em Java, Threads so implementados como uma
Classe: pacote java.lang.Thread, que uma
extenso da Classe Thread.
Em C e C++, necessitam de biblioteca especifica
para processamento: POSIX Threads (C) e Boost
(C++)
Exemplo Thread em C
8 /24
Principais Mtodos de uma Thread Java
9 /24
run(): o mtodo que executa as atividades de uma
THREAD. Quando este mtodo finaliza, a THREAD
tambm termina.
start(): mtodo que dispara a execuo de uma THREAD.
Este mtodo chama o mtodo run( ) antes de terminar.
sleep(int x): mtodo que coloca a THREAD para dormir
por x milisegundos.
join( ): mtodo que espera o trmino da THREAD para
qual foi enviada a mensagem para ser liberada.
interrupt( ): mtodo que interrompe a execuo de uma
THREAD.
interrupted( ): mtodo que testa se uma THREAD est ou
no interrompida.
Estados de uma Thread Java
10 /24
Prioridade de Thread Java
11 /24
Em Java, a prioridade determinada com um inteiro
entre 1 e 10. A prioridade padro o valor 5. 10 a
maior prioridade e 1 a menor. A THREAD herda a
prioridade da THREAD que a criou.
void setPriority(int prioridade);
int getPriority( );
Implementao de uma Thread Java
12 /24
Existem duas maneiras de criar explicitamente Threads em Java:
Estendendo a classe Thread e instanciando um objeto destanova classe:
Implementando a interface Runnable e passando um objetodesta nova classe como argumento do construtor da classe
Thread.
Prefira implementar Runnable a herdar a Thread.
Exemplo 1 Estendendo a classe Thread
13 /24
Exemplo 2 Implementando Runnable
14 /24
Implementando Thread Runnable Anonymous
15 /24
Existe uma terceira maneira de implementar Thread de
forma no explicita (fora das classes):
Sincronizao de Threads
16 /24
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
coordenar e evitar operaes simultneas em um mesmo
dado.
Uma maneira simples de resolver isto em Java
usando a palavra reserva synchronized.
Exemplo de cdigo no sincronizado
17 /24
Sincronizao de Threads
18 /24
Existem algumas tcnicas para sincronizar Threads
e/ou processos, todavia estudaremos duas maneiras
bsicas de sincronizao usando a palavra reserva
synchronized do Java:
Mtodos sincronizados
Blocos sincronizados
Mtodos sincronizados
19 /24
Bloco sincronizado
20 /24
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++;
}
}
}
Exemplo Sincronizao programa principal
21 /24
Sincronizao 1 exemplo do PrintNumbers
22 /24
Sincronizao 2 exemplo do PrintNumbers
23 /24
Threads Links teis
24 /24
http://www.tutorialspoint.com/java/java_thread_synchronization.htm
http://tutorials.jenkov.com/java-concurrency/synchronized.html
http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-
concorrente-e-threads/
https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
http://www.inf.puc-rio.br/~inf1621/java2.pdf
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)
Recommended