terça-feira, 29 de janeiro de 2013

Um exemplo básico de Threads (A patroa e a empregada)




Às vezes precisamos fazer duas coisas simultaneamente em um programa. Para isso temos que usar Threads. Para instanciar uma Thread é necessário uma referência de um objecto de um objecto que implemente a interface java.lang.Runnable. 

Uma aplicacao tem no mininmo uma Thread. O metodo man cria a thread principal e nós programaticamente podemos criar outras. Neste caso, a thread principal é "a dona da casa" e a thread secundaria é a "empregada".

O exemplo a seguir é composto por duas classes (Empregada.java & DonaDaCasa). Apenas uma delas implementa a interface Runnable, neste caso a classe Empregada.

Não faz sentido!
Você deve estar se perguntado por quê a outra classe não implementa a interface Runnable! É muito simples, eu já havia dito que quando uma aplicação inicia, é criada uma thread, a quem damos o nome de Thread principal, neste caso, a nossa Thread principal será a "dona de casa" e a Thread secundária será a "empregada", por uma simples questão de lógica, uma vez que a patroa sempre tem prioridade.

Cadê as classes?
Eis o código do ficheiro DonaDaCasa.java


public class DonaDaCasa { 
 
  public static void main(String[] args){
  
  
  //Instancia a classe Empregada que é Runnable
  Empregada empregada = new Empregada();
  //Cria a Thread actividades passando a referencia da empregada como parâmetro.
  Thread actividades = new Thread(empregada);
  //Inicia a thread actividades
  actividades.start();
  
  
  try {
  System.out.println("Dona da casa : Dormindo"); 
  Thread.sleep(1023);//Interrompe a Thread por 1023 milisegundos
  System.out.println("Dona da casa : Tomando o pequeno almoço");
  Thread.sleep(1023); 
  System.out.println("Dona da casa : Nadando na piscina");
  
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  
 }

}


Ficheiro Empregada.java
//Classe que implemente a Interface Runnable

public class Empregada implements Runnable {
 
 public void run() {
  
  try {
  System.out.println("Empregada : Fazendo compras no supermercado");   
  Thread.sleep(1056);//Interrope a thread por 1056 milisegundos.   
  System.out.println("Empregada : Cozinhando");
  Thread.sleep(1056); 
  System.out.println("Empregada : Lavando a roupa");
  Thread.sleep(1056); 
  System.out.println("Empregada : Limpando a casa");
  
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }
 

}


Saída do programa:


Dona da casa : Dormindo
Empregada : Fazendo compras no supermercado
Dona da casa : Tomando o pequeno almoço
Empregada : Cozinhando
Dona da casa : Nadando na piscina
Empregada : Lavando a roupa
Empregada : Limpando a casa


Até a próxima.


0 comentários:

Enviar um comentário

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | cheap international voip calls