• Nenhum resultado encontrado

Threads

N/A
N/A
Protected

Academic year: 2021

Share "Threads"

Copied!
32
0
0

Texto

(1)

Programação Concorrente

com Thread Java

ALBERTO WILLIAN MASCARENHAS

http://sites.google.com/site/awmascarenhas/ awmascarenhas@gmail.com

(2)

Introdução

Todos os sistemas operacionais modernos

possuem o conceito de processos que, de

forma simplificada, são programas diferentes

e independentes executados pelo sistema

operacional.

T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(3)

Introdução

• 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 T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(4)

Introdução

Um processo pode conter múltiplas threads que parecem executar ao mesmo tempo e de forma assíncrona em relação as outras threads. T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(5)

Introdução

Por que utilizar threads?

Responsividade em Interfaces Gráficas: imagine se o seu

navegador web parasse de carregar uma página só porque você clicou no menu “arquivo”;

Sistemas multiprocessados: o uso de threads permite dividir as tarefas entre todos os processadores disponíveis

aumentando, assim, a eficiência do processo;

T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(6)

Introdução

Por que utilizar threads?

Simplificação na Modelagem de Aplicações: suponha que você precise fazer um programa que simule a interação entre

diferentes entidades. Carros em uma estrada, por exemplo. É mais fácil fazer um loop que atualiza todos os carros da

simulação ou criar um objeto carro que anda sempre que tiver espaço a frente dele?

Processamento assíncrono ou em segundo plano: com threads um servidor de e-mail pode, por exemplo, atender a mais de um usuário simultaneamente. T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(7)

2. Utilizando threads

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

T h re ad s Jav a Introdução Utilizando threads

Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(8)

2. Utilizando threads

Existem duas maneiras possíveis para criarmos

threads em Java:

a) Estendendo a class Thread.

b) Implementando a interface Runnable.

T h re ad s Jav a Introdução Utilizando threads

Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(9)

2. Utilizando threads

T h re ad s Jav a Introdução Utilizando threads

Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(10)

2. Utilizando threads

T h re ad s Jav a Introdução Utilizando threads

Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(11)

2. Utilizando threads

Apesar das duas formas de uso de threads serem equivalentes, classes que necessitem estender outra classe que não Thread são obrigadas a usar a interface Runnable já que Java não possui herança múltipla. Além disso, os “puristas” em

orientação a objetos dizem que normalmente estamos

interessados em criar classes que usem threads e não classes que sejam threads e que, portanto, deveríamos implementar toda a lógica em uma classe que implementa Runnable e

depois criar a thread só quando for necessário.

T h re ad s Jav a Introdução Utilizando threads

Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(12)

3. Possíveis estados de uma thread

T h re ad s Jav a

Uma thread pode estar em um dos seguintes estados: Criada, em execução, suspensa ou morta. Introdução Utilizando threads

Possíveis estados de uma thread Alguns métodos da classe Thread Mais Informações

(13)

Ciclo de vida de uma thread

T h re ad s Jav a Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(14)

3. Possíveis estados de uma thread

T h re ad s Jav a

Uma thread se encontra no estado “criada” logo

após a instanciação de um objeto Thread. Neste ponto nenhum recurso foi alocado para a thread. A única transição válida neste estado é a transição ao para o estado “em execução”.

Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(15)

T h re ad s Jav a

A thread passa para o estado “em execução” quando

o método start() do objeto é chamado. Neste ponto a

thread pode ficar “em execução”, se tornar “suspensa” ou se tornar “morta”.

3. Possíveis estados de uma thread

Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(16)

T h re ad s Jav a

Na verdade, uma thread pode estar “em execução

mas, ainda assim, não estar ativa. Em computadores que possuem um único processador é impossível

existirem duas threads executando ao mesmo tempo. Dessa forma uma thread que está esperando para ser executada pode estar no estado “em execução” e

ainda assim estar parada.

3. Possíveis estados de uma thread

Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(17)

T h re ad s Jav a

A thread se torna “suspensa” quando um destes

eventos ocorrer:

execução do método sleep();

a thread chama o método wait() para esperar que

uma condição seja satisfeita;

a thread está bloqueada em uma operação de

entrada/saída (I/O).

3. Possíveis estados de uma thread

Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(18)

T h re ad s Jav a

A chamada ao comando sleep(int ms) faz com que a

thread espere um tempo determinado para executar novamente. A thread não é executada durante este intervalo de tempo mesmo que o processador se torne disponível novamente.

Após o intervalo dado, a thread volta ao estado “em

execução” novamente

3. Possíveis estados de uma thread

Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(19)

T h re ad s Jav a

Se a thread chamar o comando wait() então ela deve

esperar uma outra thread avisar que a condição foi

satisfeita através dos comandos notify() ou notifyAll().

3. Possíveis estados de uma thread

Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(20)

T h re ad s Jav a

Se a thread chamar o comando wait() então ela deve

esperar uma outra thread avisar que a condição foi

satisfeita através dos comandos notify() ou notifyAll().

Se a thread estiver esperando uma operação de

entrada/saída ela retornará ao estado

“em execução” assim que a operação for concluída.

3. Possíveis estados de uma thread

Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(21)

T h re ad s Jav a

Por fim, a thread se torna “morta” se o método run()

chegar ao fim de sua execução ou se uma exceção não for lançada e não for tratada por um bloco try/catch.

3. Possíveis estados de uma thread

Introdução Utilizando threads

Possíveis estados de uma thread

Alguns métodos da classe Thread Mais Informações

(22)

4. Alguns métodos da classe Thread:

run()

deve estar presente em todas as threads.

start()

Registra a thread no thread scheduler.

getName()/setName()

Atribui ou retorna o nome de uma thread.

Por default as threads são nomeadas numericamente.

yield()

Faz com que a thread corrente pause, possibilitando que outra thread seja despachada.

T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread

Alguns métodos da classe Thread

(23)

4. Alguns métodos da classe Thread:

sleep()

Faz com que a thread fique em estado de espera uma

quantidade mínima de tempo, em ms, possibilitando a CPU executar outras threads.

interrupt()

Atribui à thread o estado de interrompível.

isInterrupted()

Verifica se foi atribuído à thread o estado de interrompível.

T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread

Alguns métodos da classe Thread

(24)

4. Alguns métodos da classe Thread:

getPriority()/setPriority()

Atribui ou retorna a prioridade de despacho de uma thread.

join()

Condiciona a continuação da execução de uma thread ao término de uma outra.

T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread

Alguns métodos da classe Thread

(25)

4. Alguns métodos da classe Thread:

getPriority()/setPriority()

Atribui ou retorna a prioridade de despacho de uma thread.

join()

Condiciona a continuação da execução de uma thread ao término de uma outra.

T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread

Alguns métodos da classe Thread

(26)

4. Alguns métodos da classe Thread:

wait()

Utilizado para sincronizar acesso a um objeto. Coloca a thread corrente em estado de espera até que outra thread chame os métodos notify ou notifyAll liberando o objeto.

notify()

Acorda a thread que, voluntariamente, estava esperando a liberação de um objeto.

notifyAll()

Acorda todas as threads que estavam esperando a liberação de um objeto. T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread

Alguns métodos da classe Thread

(27)

T h re ad s Jav a

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

( )

;

(28)

T h re ad s Jav a

Prioridade de Thread

Prioridade 10 Prioridade 1 Prioridade 9 Prioridade 8 Prioridade 2 Prioridade 3 . . . A B C D E F G

(29)

T h re ad s Jav a

EXERCÍCIO

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

(30)

T h re ad s Jav a

EXERCÍCIO

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?

(31)

CRÉDITOS

Universidade Federal do Rio de Janeiro – IM/DCC Utilização de threads em Java

Prof. Austeclynio Pereira

e-mail: austeclyniop@posgrad.nce.ufrj.br

Introdução ao uso de Threads em Java

Daniel de Angelis Cordeiro

danielc@ime.usp.br

www.ime.usp.br/~gold/cursos/2004/mac438/threadsEmJava.pdf

Programação Concorrente com Thread Java

Luiz Affonso Guedes

Sistemas Distribuidos T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread Alguns métodos da classe Thread

(32)

5. Referências

[1] JavaTM2 Plataform API Specification. http://java.sun.com/j2se/1.4.2/docs/api/.

[2] James Gosling, Bill Joy, Gilad Bracha e Guy Steele. The Java Language Specification, 2a edição. Addison-Wesley, 2000. Dispon´ıvel em http://java.sun.com/docs/books/jls/.

[3] Mary Campione e Kathy Walrath. The Java Tutorial, terceira edição. Addison-Wesley, 1998. Disponível em http://java.sun.com/docs/books/tutorial/.

[4] Brian Goetz. Introduction to Java threads. IBM DeveloperWorks, setembro 2002. Disponível em http://www-106.ibm.com/developerworks/edu/j-dw-javathread-i.html.

[5] Alex Roetter. Writing multithreaded Java applications. IBM DeveloperWorks, fevereiro 2001. Disponível em http://www-106.ibm.com/developerworks/library/j-thread.html.

[6] Brian Goetz. Double-checked locking: Clever, but broken. JavaWorld, fevereiro 2001. Disponível em http://www.javaworld.com/jw-02-2001/jw-0209-double.html.

[7] Doug Lea. Synchronization and the Java Memory Model. Disponível em http://gee.cs.oswego.edu/dl/cpj/jmm.html. [8] David Bacon et al. The ”Double-Checked Locking is Broken” Declaration. Disponível em

http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html.

[9] Neel Kumar. IBM DeveloperWorks, abril 2000. Disponível em http://www-106.ibm.com/developerworks/java/library/j-threadsafe/.

[10] Gregory Andrews. Foundations of Multithreaded, Parallel and Distributed Programming. Addison-Wesley, 1999.

T h re ad s Jav a Introdução Utilizando threads Possíveis estados de uma thread Alguns métodos da classe Thread

Referências

Documentos relacionados

5.21 - Termo de Referência: É o instrumento orientador, elaborado pelo órgão ambiental com a participação do empreendedor, que tem como finalidade estabelecer as diretrizes para a

Serão realizadas também aulas remotas com turmas pequenas (decidir com a turma) para discussão entre o professor e os alunos referentes a cada ítem da ementa de laboratórios

A decisão recorrida não acolheu a pretensão orientada na inicial ao entendimento de que o grupo familiar possui renda mensal per capita superior a ¼ do salário-mínimo.

Para instalar o porteiro AM-PPR com apenas uma tecla reservada para central AM-C100 é necessário colocar o “JUMPER” J1 e retirar o “JUMPER” J2 existente na placa

-021 Por quilograma, maior do que o limite de preços máximo do imposto específico aplicado para partes de suíno, mas não maior do que o preço de entrada de partes de suíno,

3 - Quando não possa reparar-se convenientemente o caixão deteriorado, encerrar-se-à o mesmo noutro caixão de zinco ou será removido para sepultura à escolha

O PROGRAMA DE PÓS-GRADUAÇÃO EM FISIOPATOLOGIA E CIÊNCIAS CIRÚRGICAS, DA UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO - UERJ torna público o presente Edital,

Essas operações, com e sem risco de crédito, são contabilizadas em conta do ativo “Outros créditos de operações com planos de assistência à saúde”