Programa - PowerPoint PPT Presentation

About This Presentation
Title:

Programa

Description:

Programa o Concorrente com Thread Java Luiz Affonso Guedes Sistemas Distribuidos Defini es B sicas Threads s o sub-procesos no sistema operacional. menos ... – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 22
Provided by: guestt7
Category:

less

Transcript and Presenter's Notes

Title: Programa


1
Programação Concorrente com Thread Java
  • Luiz Affonso Guedes
  • Sistemas Distribuidos

2
Definições Básicas
  • Threads são sub-procesos no sistema operacional.
  • É menos custoso gerenciar threads do que
    processos.
  • As linguagens Java e Ada possuem funcionalidades
    MULTITHREADING na própria estrutura da linguagem.
  • C e C necessitam de biblioteca especifica para
    processamento MULTITHREADING
  • Posix p_thread

3
Thread em Java
  • Em Java, threads são implementadas como uma
    CLASSE
  • Pacote java.lang.Thread
  • É uma extensão da classe Thread
  • Contrutores
  • public Thread (String nome_da_thread)
  • public Thread ( ) // o nome sera Thread-
  • Thread-1, Thread-2,

4
Principais Métodos
  • run() é o método que executa as atividades de
    uma THREAD. Quando este método finaliza, a THREAD
    também termina.
  • start() método que dispara a execução de uma
    THREAD. Este método chama o método run( ) antes
    de terminar.
  • sleep(int x) método que coloca a THREAD para
    dormir por x milisegundos.

5
Principais Métodos
  • join( ) método que espera o término da THREAD
    para qual foi enviada a mensagem para ser
    liberada.
  • interrupt( ) método que interrompe a execução de
    uma THREAD.
  • interrupted( ) método que testa se uma THREAD
    está ou não interrompida.

6
Estados de uma Thread em Java
nascimento
Término do tempo de dormida
start( )
Fim da E/S
pronta
notify( )
notifyAll( )
run( )
Alocar um processador
executando
E/S
wait( )
Fim do Método run( )
sleep( )
esperando
dormindo
morta
bloqueada
7
Prioridade de Thread
  • Em Java, a prioridade é determinada com um
    inteiro entre 1 e 10.
  • A prioridade padrão é 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( )

8
Algoritmo de Escalonamento
9
Exemplo 01
  • O programa cria 04 threads e as coloca para
    dormir.
  • ThreadBasica é uma extensão da classe Thread.

10
Exercício 01
  • Analise como se chama o método sleep().
  • Crie n THREADs, onde n é definido pelo usuário.
  • Utilize o método join no main para esperar as
    THREADs terminarem.
  • try
  • uma_thread.join( ) // uma_thread.join(temp
    o)
  • . . .
  • catch (InterruptedException e)

11
Escalonamento de Threads
12
Exemplo 02
  • Prioridades de Threads
  • Utilize o método setPriority(int) para mudar a
    prioridade de threads
  • Utilize 01 thread com prioridade 1, 01 com
    prioridade 09 e as outras com prioridade 5.
  • Faça com que uma das threads de alta prioridade
    durma por 10 ms antes de terminar.
  • Faça com que outra thread de alta prioridade faça
    uma entrada de dado.

13
Exemplo 03
  • Problema Produtor X Consumidor
  • Com buffer de tamanho 1.
  • Variáveis compartilhadas.
  • A solução do problema seria utilizar-se duas
    THREADS 01 consumidor e 01 produtor.
  • O que ocorre se não houver sincronização entre a
    leitura e escrita?

14
Exemplo 04
  • Problema do Produtor X Consumidor com
    sincronizacao do Buffer.
  • Em Java, a sincronização entre threads é feita
    através do conceito de monitores.
  • Monitor é um agrupamento de funções, cujas
    execuções não podem se dar de forma concorrente.

15
Exemplo 04
  • Utilizar os métodos multuamente excludentes de um
    objeto como do tipo synchronized em Java.
  • Utilizar os métodos 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).

16
Exemplo 5
  • Utilização da Classe Semarofo para resolver o
    problema de Produtor-Consumidor
  • Utilizar dois objetos (instâncias) da classe
    Semaforo.
  • s1 e s2
  • Valores iniciais s1 1 s2 0

17
A interface Runnable
  • Para utilizar multithreads em Java é necessário
    instanciar um objeto de uma classe que estende a
    classe básicaThread, certo?
  • Uma vez que Java não possui herança múltipla,
    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

18
A interface Runnable
  • A solução encontrada em Java foi a utilização de
    uma interface Runnable
  • No caso, tem-se de implementar esta interface,
    que possui o método 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.

19
A interface Runnable
  • Cria-se uma thread (Classe Thread), passando para
    o seu construtor uma referência 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)

20
Solução Baseada na Interface Runnable
Thread
Classe A
referência
Classe B
Runnable
21
Solução Baseada em Herança da Classe Thread
Thread
Classe B
instanciação
Write a Comment
User Comments (0)
About PowerShow.com