• Nenhum resultado encontrado

Introdução ao uso de Introdução ao uso de ThreadsThreads em Javaem Java

N/A
N/A
Protected

Academic year: 2022

Share "Introdução ao uso de Introdução ao uso de ThreadsThreads em Javaem Java"

Copied!
15
0
0

Texto

(1)

Introdução ao uso de

Introdução ao uso de Threads Threads em Java

em Java

Daniel de Angelis Cordeiro Aula para a disciplina

MAC 0438 – Programação Concorrente

(2)

Introdução Introdução

Threads, também chamados de processos leves, permitem múltiplas atividades dentro de um único processo;

Um mesmo processo pode conter múltiplas threads que parecem executar ao mesmo tempo;

Java é a primeira linguagem de programação a incluir o conceito de threads na própria

linguagem.

(3)

Por que utilizar

Por que utilizar Threads Threads ? ?

Há várias razões para utilizarmos threads.

Entre elas:

Maior desempenho em ambientes multiprocessados;

Responsividade em interfaces gráficas;

Simplificação na modelagem de algumas aplicações.

(4)

Criando

Criando Threads Threads

Há duas formas de criarmos uma thread em Java:

Ou usamos herança e criamos uma classe que estende a classe Thread;

Ou criamos uma classe que implementa a interface Runnable.

(5)

Usando Herança Usando Herança

Usando herança, nossa classe deve

sobrescrever o método public void run():

class Tarefa1 extends Thread { public void run() {

for(int i=0; i<1000; i++)

System.out.println(“Usando herança”);

} }

(6)

Usando a Interface

Usando a Interface Runnable Runnable

A interface Runnable nos obriga a

implementar o método public void run(): class Tarefa2 implements Runnable {

public void run() {

for(int i=0; i<1000; i++)

System.out.println(“Usando Runnable”);

} }

(7)

Exemplo de Uso Exemplo de Uso

Para usar as classes Tarefa1 e Tarefa2 devemos fazer:

Thread threadComHeranca = new Tarefa1();

Thread threadComRunnable =

new Thread(new Tarefa2());

threadComHeranca.start();

threadComRunnable.start();

(8)

Saída do Exemplo Saída do Exemplo

A saída de nosso exemplo é mais ou menos essa:

Usando Runnable Usando Herança Usando Herança Usando Runnable

Usando Herança Usando Runnable

(...)

(9)

Estados de uma Thread Estados de uma Thread

Uma thread pode estar em um dos seguintes estados:

criada;

em execução;

suspensa ou

morta.

(10)

Sincronismo entre

Sincronismo entre Threads Threads

O uso de memória compartilhada entre as threads obriga o programador a sincronizar as ações de suas threads.

Para isso, Java provê monitores ou locks.

Imagine um lock como uma permissão para que apenas uma thread possa utilizar um

recurso por vez.

Cada objeto em Java possui um lock e ele deve ser obtido através do comando

synchronized.

(11)

O comando

O comando synchronized synchronized

synchronized public void teste() {

façaAlgo();

}

public void teste() {

synchronized(this) { façaAlgo();

} }

Os seguintes usos do comando synchronized são equivalentes:

(12)

Variáveis Voláteis Variáveis Voláteis

Variáveis voláteis possuem as

seguintes

características:

operações atômicas;

mudanças visíveis globalmente;

são instáveis.

Exemplo de código:

class VolatileTeste { boolean flag;

public void foo() { flag = false;

if(flag) { (...) } }

}

(13)

wait(), notify() e notifyAll() wait(), notify() e notifyAll()

Estes métodos da classe Object implementam o conceito de monitores sem utilizar espera ativa. Ao invés disso, notificam as threads indicando se estas devem ser suspensas ou se devem voltar a ficar em execução.

O lock do objeto chamado pela thread para realizar as notificações será utilizado. Por

isso, antes de chamar um dos três métodos, o lock deve ser obtido utilizando-se o

comando synchronized.

(14)

wait(), notify() e notifyAll() wait(), notify() e notifyAll()

wait() - suspende a thread que chamou o

método até que outra thread a acorde ou até que o tempo especificado como argumento tenha passado;

notify() - acorda, se existir, alguma thread que esteja esperando um evento neste

objeto;

notifyAll() - acorda todas as threads que estejam esperando neste objeto.

(15)

Mais Informações Mais Informações

Se mesmo depois desta maravilhosa aula você ainda tiver alguma dúvida, recomendo a

leitura do texto que preparei sobre threads em Java (que está muito mais completo).

Para cada referência do texto coloquei um apontador para a página onde ela se

encontra na internet. Assim você nem

precisa procurar o livro na biblioteca para consultar.

:-)

Referências

Documentos relacionados

Para que seja possível a interoperabilidade entre objetos instanciados nos servidores distribuídos e as aplicações construídas pelos desenvolvedores, somente a estrutura de objetos

Pós-modernismo é um termo amplo que se refere não somente a uma época, mas também a uma perspectiva filosófica, que inclui uma crítica ideológica dos fundamentos do

Existe ainda uma outra forma, na qual resumidamente se compreende o primeiro passo do Nobre Caminho Óctuplo e se utiliza a vontade de superação da experiência da existência

As razões são duas: (a)após a primeira guerra mundial, os matemáticos autríacos e alemães, nacionalidade dos matemáticos da Escola Austríaca, foram proibidos de participar

Esta função mostra na tela a mensagem de texto e aguarda que o usuário digite um texto (string) que será armazenado (mas não alvaliado) na variável R.. Isto permite uma

Apesar de existirem diversas ferramentas computadorizadas de apoio ao ensino de programação, como foram citadas algumas, nenhuma delas oferece um processo de

Ainda segundo Gil (2002), como a revisão bibliográfica esclarece os pressupostos teóricos que dão fundamentação à pesquisa e às contribuições oferecidas por

“O aumento da eficiência e o plano de produção fizeram com que a disponibilidade das células de fabricação aumentasse, diminuindo o impacto de problemas quando do