quinta-feira, 24 de setembro de 2009

Threads com Java

por Peter Jandl Jr

Threads
Uma thread define um fluxo de execução independente dentro de um programa e permite
que sejam isoladas tarefas específicas dentro deste. Como as threads são partes do mesmo programa, i.e., fazem parte de um mesmo contexto computacional, então os recursos do
sistema reservados para um programa estão disponíveis para todas as suas threads, e por isso
as threads são consideradas processos leves. Em sistemas onde as threads são suportadas,
programas com um único fluxo de execução (programas sequenciais comuns) são denominados
single-threaded ou de thread única. Já aqueles que definem múltiplos fluxos de execução são
chamados de multithreaded.

O uso das threads pode tornar um programa eficiente e versátil, garantindo que sua interface
se mantenha responsiva, mesmo enquanto o programa executa suas tarefas, ou permitindo
que várias tarefas sejam realizadas ao mesmo tempo.

O uso de threads na plataforma Java é relativamente simplificado, sendo que sua API Java inclui classes especialmente destinadas ao uso e controle das threads que são: Thread e ThreadGroup, além da interface Runnable.

A Classe Thread
A classe Thread, pertencente ao pacote java.lang, permite representar um fluxo independente
de execução dentro de um programa. Basicamente define-se uma nova thread através da
criação de uma subclasse de Thread, na qual se implementa o método run(), que contém o
código que a ser executado. Por exemplo:

class MinhaThread extends Thread {
public void run() {
System.out.println("Inicio: " + getName());
for (int i=0; i<5;>
System.out.println(i + "-" + getName());
}
System.out.println("Fim: " + getName());
}

}
Uma thread assim definida imprimirá no console a contagem de 0 até 5, acompanhada de
seu próprio nome. No início e fim do método run() ocorre a impressão de uma mensagem
indicativa. Para criar uma thread declara-se um objeto de classe e usa-se o operador new
para instanciar o novo objeto (tal como para qualquer outro objeto Java) definindo ou não
um nome para a nova thread:

MinhaThread minhaThread1 = new MinhaThread();
MinhaThread minhaThread2 = new MinhaThread("A Minha Thread");


A instanciação de uma thread não basta para colocá-la em execução. É necessário iniciá-la
explicitamente através do método start(), que providencia o escalonamento da thread pelo
sistema operacional e a consequente execução do método run(), como segue:

minhaThread1.start();

Segue um outro exemplo:

public class TestaThreads {
public static void main(String a[]) {
System.out.println("Inicio: main");
MinhaThread mt1 = new MinhaThread(),
mt2 = new MinhaThread(), mt3 = new MinhaThread();
mt1.start(); mt2.start(); mt3.start();
System.out.println("Fim: main");
}
}
class MinhaThread extends Thread {
public void run() {
System.out.println("Inicio: "+ getName());
for (int i=0; i<5;> System.out.println(i + -"+ getName());
System.out.println("Fim: "+ getName());
}
}


Se executado, este exemplo produz o seguinte resultado:
Referências

  • JANDL JR. Peter. Java 6 - Guia de Consulta Rápida. São Paulo: Novatec, 2008.
  • JANDL JR. Peter. Java - Guia do Programador. São Paulo: Novatec, 2007.
  • Sun. Classe Thread. Disponível em:
    http://72.5.124.55/javase/6/docs/api/java/lang/Thread.html
  • Sun. Interface Runnable. Disponível em:
    http://72.5.124.55/javase/6/docs/api/java/lang/Runnable.html

Nenhum comentário:

Postar um comentário