wpjr2’s Weblog

Artigos e tutoriais úteis

Multithreading em Java

Posted by wpjr2 em abril 20, 2008

A classe Thread representa um fluxo de controle ou execução de um programa. A Máquina Virtual Java permite que uma aplicação tenha múltiplos processos concorrentes em execução. Threads são também
considerados como processos “leves” de execução. As threads são criadas e existem dentro de um processo, onde cada um deste deve possuir pelo menos uma thread. As threads dento de um mesmo processo  compartilham recursos do processo, incluindo memória e arquivos abertos.

Cada processo ou thread possui uma prioridade associada, onde processos com prioridade mais alta são executados em preferência de processos com prioridade mais baixa pela máquina virtual Java. Quando
uma nova thread é criada, esta possui uma prioridade igual à thread que a criou. Threads do tipo Daemon são threads especiais onde estas provêem serviço para outras threads.

Em Java, existem duas maneiras de se criar objetos executáveis do tipo Thread:

  1. Criando uma subclasse (extensão) da classe Thread
  2. Criando uma classe que implemente a interface Runnable

Extendendo Thread

O primeiro destes implica na criação da uma classe que seja subclasse de Thread. Esta classe deve sobrescrever o método run() da superclasse Thread. Uma instância desta classe pode ser instanciada e
iniciada. Por exemplo, uma thread que calcula primos maiores do que um valor mencionado pode ser implementada da seguinte forma:

class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}

public void run() {
// compute primes larger than minPrime
. . .
}
}

O seguinte código abaixo pode ser usado para criar um objeto do tipo Thread e iniciar sua execução:

PrimeThread p = new PrimeThread(143);
p.start();

Implementando Runnable
A outra maneira de se criar uma thread é declarando uma classe que implemente a interface Runnable. Esta classe então implementaria o método run(). Uma instância desta classe poderia ser alocada, passada
como argumento na criação de uma nova Thread e iniciada. O mesmo exemplo acima implementado desta maneira estaria da seguinte forma:

class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}

public void run() {
// compute primes larger than minPrime
. . .
}
}

O seguinte código cria então uma nova thread e a inicia:
PrimeRun p = new PrimeRun(143);
new Thread(p).start();

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: