Você está na página 1de 21

Programao Concorrente com Thread Java

Luiz Affonso Guedes Sistemas Distribuidos

Definies Bsicas
Threads so sub-procesos no sistema operacional. menos custoso gerenciar threads do que processos. As linguagens Java e Ada possuem funcionalidades MULTITHREADING na prpria estrutura da linguagem. C e C++ necessitam de biblioteca especifica para processamento MULTITHREADING
Posix p_thread

Thread em Java
Em Java, threads so implementadas como uma CLASSE
Pacote java.lang.Thread uma extenso da classe Thread Contrutores: public Thread (String nome_da_thread); public Thread ( ); // o nome sera Thread-#
Thread-1, Thread-2,

Principais Mtodos
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.

Principais Mtodos
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 em Java


Trmino do tempo de dormida notify( )

nascimento
start( ) Fim da E/S

pronta
notifyAll( ) run( ) Alocar um processador

executando
wait( ) sleep( ) E/S Fim do Mtodo run( )

esperando

dormindo

morta

bloqueada

Prioridade de Thread
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 acriou. void setPriority(int prioridade); int getPriority( );

Algoritmo de Escalonamento
Prioridade 10 Prioridade 9 Prioridade 8 A B C

. . .
Prioridade 3 Prioridade 2 Prioridade 1 G D E F

Exemplo 01
O programa cria 04 threads e as coloca para dormir. ThreadBasica uma extenso da classe Thread.

Exerccio 01
Analise como se chama o mtodo sleep(). Crie n THREADs, onde n definido pelo usurio. Utilize o mtodo join no main para esperar as THREADs terminarem.
try { uma_thread.join( ); // uma_thread.join(tempo) ...} catch (InterruptedException e) { }

Escalonamento de Threads
Prioridade 10 Prioridade 9 Prioridade 8 A B C

. . .
Prioridade 3 Prioridade 2 Prioridade 1 G D E F

Exemplo 02
Prioridades de Threads Utilize o mtodo setPriority(int) para mudar a prioridade de threads
Utilize 01 thread com prioridade 1, 01 com prioridade 09 e as outras com prioridade 5. Faa com que uma das threads de alta prioridade durma por 10 ms antes de terminar. Faa com que outra thread de alta prioridade faa uma entrada de dado.

Exemplo 03
Problema Produtor X Consumidor
- Com buffer de tamanho 1. - Variveis compartilhadas. - A soluo do problema seria utilizar-se duas THREADS: 01 consumidor e 01 produtor. - O que ocorre se no houver sincronizao entre a leitura e escrita?

Exemplo 04
Problema do Produtor X Consumidor com sincronizacao do Buffer. Em Java, a sincronizao entre threads feita atravs do conceito de monitores. Monitor um agrupamento de funes, cujas execues no podem se dar de forma concorrente.

Exemplo 04
Utilizar os mtodos multuamente excludentes de um objeto como do tipo synchronized em Java. Utilizar os mtodos wait( ) e notify( ) para bloquear e liberar, respectivamente, as threads. Escreva uma classe em Java chamada Semaforo que implente as primitiva P(s) e V(s).

Exemplo 5
Utilizao da Classe Semarofo para resolver o problema de ProdutorConsumidor:
Utilizar dois objetos (instncias) da classe Semaforo.
s1 e s2 Valores iniciais: s1 = 1; s2 = 0;

A interface Runnable
Para utilizar multithreads em Java necessrio instanciar um objeto de uma classe que estende a classe bsicaThread, certo? Uma vez que Java no possui herana mltipla, como eu posso utilizar um objeto, cuja classe j derivada, como no caso da ClasseThread?
public class Filho extends Pai extends Thread { . } // isto nao eh possivel em Java

A interface Runnable
A soluo encontrada em Java foi a utilizao de uma interface: Runnable
No caso, tem-se de implementar esta interface, que possui o mtodo run( ).
public class Filho extends Pai implements Runnable Ao implementar uma interface, a classe se capacita a ser tratada como se fosse um objeto do tipo da inteface implementada.
Se a classe Filho implementar a interface Runnable, ela pode ser tratada como tal.

A interface Runnable
Cria-se uma thread (Classe Thread), passando para o seu construtor uma referncia do objeto que implementa a interface Runnable.

Thread uma_Thread = new Thread(Runnable obj_thread) Thread uma_Thread = new Thread(Runnable obj_thread, String nome_da_thread)

Soluo Baseada na Interface Runnable


Classe A
Thread

referncia Classe B

Runnable

Soluo Baseada em Herana da Classe Thread


Thread

Classe B

instanciao

Você também pode gostar