You are on page 1of 6

THREADS (HILOS) Qu son?

Un hilo -algunas veces llamado contexto de ejecucin o proceso ligero- es un flujo


de control secuencial dentro de un programa. Un nico hilo es similar a un programa
secuencial; es decir, tiene un comienzo, una secuencia y un final, adems en cualquier
momento durante la ejecucin existe un slo punto de ejecucin. Sin embargo, un hilo no
es un programa; no puede correr por s mismo, corre dentro de un programa. Un hilo por
si mismo no nos ofrece nada nuevo. Es la habilidad de ejecutar varios hilos dentro de un
programa lo que ofrece algo nuevo y til; ya que cada uno de estos hilos puede ejecutar
tareas distintas.
Se conocen tambin como procesos ligeros.
Un thread es un flujo de ejecucin secuencial dentro de un proceso.
Un mismo proceso java puede tener.
a). Un nico thread (el thread principal) y por tanto se le llama monotarea.
b). Varios threads (por ejemplo el thread principal y el de gestin de eventos). Y por
tanto se le llama monotarea.
Casi todas las clases referentes al manejo de threads se encuentran en el paquete
java.lang.*

Creacin de Hilos
Existen dos modos de crear Hilos en Java
Extender la clase Thread
Implementar la interface Runnable

El primer modo consiste en
1. crear una nueva clase que hereda la clase Thread y redefinir el mtodo run().
(Este mtodo contendr el cdigo que va a ser ejecutado por el hilo)

2. Luego se instancian objetos de la clase derivada y se llama a su mtodo start().
(As se arrancan hilos que ejecutan el cdigo contenido en el mtodo run())
El paquete java.lang define una clase Thread que sirve para crear hilos.
Veamos un ejemplo

Paso 1
Esta clase define el prototipo para presentar mensajes en pantalla cada x segundos.
import java.awt.*;
//definimos la clase Hilo derivada de la clase Thread
//as podremos instanciar todos los hilos que queramos
class Hilo extends Thread{
private String s; //para almacenar los mensajes
private int pausa; //pausa antes de presentar el mensaje
//Constructor, se indica el mensaje y la pausa
public Hilo(String m, int p){
s = m;
pausa = p;
}
//Definimos el mtodo run() similar al main()pero para Hilos
//recordar el contenido de Mensaje1.java
public void run(){
do{
try{
sleep (pausa*1000);
}catch (InterruptedException e){
;
}
System.out.println(s);
}while (true);
}
}
Paso 2
Esta clase hace uso de la clase Hilo y presenta dos mensajes en pantalla, uno cada 3
segundos y otro cada 5 segundos.
import java.lang.*;
public class Mensaje3 {
public static void main(String args[]){
Hilo m1,m2; /instanciamos dos objetos de la clase Hilo
String s1,s2;
s1 = new String("Visite el portar miWeb.com");
s2 = new String("EL MEJOR PORTAR EN INTERNET!");
//creamos los hilos m1 y m2
m1 =new Hilo(s1,3);
m2 =new Hilo(s2,5);
//arrancamos los hilos
m1.start();
m2.start();
}
}

El otro modo de crear hilos es mediante la implementacin de la interfaz Runnable.
Lo primero que nos preguntamos es por qu existe la posibilidad de crear hilos de otro
modo?
La respuesta es que el primer modo no satisface todas las necesidades que se nos
puedan presentar. Como ejemplo tpico, nos puede interesar heredar de la clase Applet y
a la vez emplear los servicios de threads.
En Java no est permitida la herencia mltiple, al menos de clases, la forma de solucionar
este problema es utilizando una interface (lo que sera una clase abstracta pura en C++)
que permita que las clases que implementa la interface puedan ser utilizada por la clase
Thread como base para crear un hilo.
La interfaz utilizada se denomina Runnable.


Podemos utilizar dos formas de crear Hilos utilizando Applets:
Una consiste es crear clases extendidas de Thread, que contendr el cdigo de ejecucin
del hilo, donde pasamos al constructor una referencia al applet que crea los hilos
mediante this, esto es lo que hemos hecho en AppletConcurrent.java

hilo1 = new HiloApplet(this,pausa1);
hilo2 = new HiloApplet(this,pausa2);
Otra forma consiste en colocar el cdigo de ejecucin del hilo en el mtodo run() del
applet y crear los hilos como una instancia de la clase Thread. Esto es lo que hemos
hecho en el applet appletConcurrent2.java
Esta clase presenta dos mensajes en pantalla, uno cada 3 segundos y otro cada 5
segundos
public class AppletConcurrent2 extends Applet implements Runnable {
String mensaje; //almacena el mensaje a presentar
String s1,s2; //almacena las dos cadenas para los dos mensajes
int pausa1, pausa2, pausa;
Thread hilo1,hilo2;
Rectangle r; //coordenadas del marco del applet
int fila=10; // fila inicial del primer mensaje


public void init(){
setFont(new Font("Dialog",Font.BOLD,14));
mensaje ="";
s1 = new String("Visite el portal miWeb.com");
pausa1 = 3;
s2 = new String("EL MEJOR PORTAL EN INTERNET!");
pausa2 = 5;
hilo1 = new Thread(this);
hilo2 = new Thread(this);
hilo1.start();
hilo2.start();

}
public void run(){
//obtiene el identificador del Thread
do{
Thread tActual = Thread.currentThread();
if (hilo1 == tActual)
{ mensaje = s1;pausa = pausa1;}
if (hilo2 == tActual) {mensaje = s2;pausa = pausa2;}
try{
tActual.sleep (pausa*1000);
}catch (InterruptedException e){
;
}
repaint(); // repintar la zona de dibujo
}while (true);
}
public void paint(Graphics g){
r = g.getClipBounds(); //obtener las coordenadas del marco del applet
g.setColor(Color.blue);
g.drawString(mensaje,20,fila);
fila = fila+18;
if (fila > r.height) fila=10;
}
//parada de los hilos al abandonar el documento html
public void stop(){
hilo1 = hilo2 = null;
}
}


Como Funcionan
http://panamahitek.com/multiprocesos-en-java-como-usar-hilosthreads/