Vous êtes sur la page 1sur 4

Nombre: Andres Rosado Gutirrez

Curso: S4A

HILOS DE EJECUCION (THREADS)


Un hilo en Java es:

Una instancia de la clase java.lang.Thread


Un proceso en ejecucin
Los principales mtodos a tomar en cuenta con el manejo de los hilos son: start(),
yield(), sleep() y run().

Los Hilos o los Threads en Java, son basicamente una forma de poder ejecutar varios
procesos simultneamente en nuestros programas en Java.
Para definir e instanciar un nuevo Thread (hilo, proceso) existen 2 formas:

Extendiendo (o heredando) a la clase java.lang.Thread


Implementando la interfaz Runnable

Siempre se necesita un objeto tipo Thread para realizar el trabajo, independientemente si


extiendes la clase Thread o implementas Runnable.

Comenzando con el trabajo:


Hasta ahora sabemos cmo crear el objeto tipo Thread e instanciarlo y sabemos que debe de
estar en un estado vivo para que realice su funcin, para ello se utiliza el mtodo start().
hilo.start();
Se debe de llamar al mtodo start() a travs de una instancia de la clase Thread. Una vez que
llamamos al mtodo start() sucede lo siguiente:
Un nuevo proceso de ejecucin comienza (con su propia pila de informacin).
El hilo o proceso cambia de estado nuevo o new a estado de ejecucin o runnable.
Cuando el hilo tenga su turno de ejecutarse, el mtodo run() del objeto al que refiere se
ejecuta.
P. ej.
public class Hilos {
public static void main(String[] args){
System.out.println("Dentro de main...");
HiloNuevo hn = new HiloNuevo();
Thread nuevoHilo = new Thread(hn);
nuevoHilo.start();
}
}
class HiloNuevo implements Runnable{
public HiloNuevo(){
System.out.println("Comenzando un HiloNuevo...");
}

Nombre: Andres Rosado Gutirrez

Curso: S4A

public void run(){


System.out.println("Llamando al mtodo run de HiloNuevo...");
for(int i=0;i<5;i++)
{
System.out.println(i);
}
System.out.println("Terminando el trabajo...");
}
}
Al ejecutar el cdigo anterior nos da un resultado como el siguiente:
Dentro de main...
Comenzando un HiloNuevo...
Llamando al mtodo run de HiloNuevo...
0
1
2
3
4
Terminando el trabajo...

Ejecutando varios hilos al mismo tiempo:


Vamos a analizar un ejemplo de 3 hilos realizando el mismo trabajo, comenzaremos con una
clase que implementa la interfaz Runnable, la cual es instanciada y enviada a 3 diferentes hilos,
posteriormente le damos un nombre a cada uno de ellos e iniciamos su trabajo con el mtodo
start().
public class Hilos {
public static void main (String[] args){
HiloNuevo hn = new HiloNuevo();
Thread uno = new Thread(hn);
Thread dos = new Thread(hn);
Thread tres = new Thread(hn);
uno.setName("Luis");
dos.setName("Carlos");
tres.setName("Mara");
uno.start();
dos.start();
tres.start();
}
}
class HiloNuevo implements Runnable{
public void run(){
for(int i=0;i<3;i++)
{
System.out.println("Comenzado por " + Thread.currentThread().getName() + ", i = "+i);
}
}
}

Nombre: Andres Rosado Gutirrez

Curso: S4A

Una vez que ejecutamos lo anterior nos dar un resultado parecido a lo siguiente:
Comenzado por Luis, i = 0
Comenzado por Luis, i = 1
Comenzado por Luis, i = 2
Comenzado por Carlos, i = 0
Comenzado por Carlos, i = 1
Comenzado por Carlos, i = 2
Comenzado por Mara, i = 0
Comenzado por Mara, i = 1
Comenzado por Mara, i = 2
...o no?, si lo volvemos a ejecutar (al menos en mi mquina) obtengo lo siguiente:
Comenzado por Luis, i = 0
Comenzado por Carlos, i = 0
Comenzado por Luis, i = 1
Comenzado por Carlos, i = 1
Comenzado por Luis, i = 2
Comenzado por Mara, i = 0
Comenzado por Mara, i = 1
Comenzado por Mara, i = 2
Comenzado por Carlos, i = 2
Usualmente para poder utilizarlos tenemos que crear clases que extienden a la clase Thread, y
reescribir el metodo principal run(), el cual es el que se va a ejecutar principalmente al iniciar
un hilo, thread o nuevo proceso en java.
Ejemplo:

Nombre: Andres Rosado Gutirrez

Curso: S4A

Interface Runnable
La interface Runnable proporciona un mtodo alternativo a la utilizacin de la clase Thread,
para los casos en los que no es posible hacer que la clase definida extienda la clase Thread.
Esto ocurre cuando dicha clase, que se desea ejecutar en un hilo independiente deba extender
alguna otra clase. Dado que no existe herencia mltiple, la citada clase no puede extender a la
vez la clase Thread y otra ms.
En este caso, la clase debe implantar la interface Runnable, variando ligeramente la forma en
que se crean e inician los nuevos hilos.

public class ThreadEjemplo implements Runnable {


public void run() {
for (int i = 0; i < 5 ; i++)
System.out.println (i + " " + Thread.currentThread ().getName ());
System.out.println ("Termina thread + Thread.currentThread ().getName ());
}
public static void main (String [] args) {
new Thread (new ThreadEjemplo(), "Pepe").start();
new Thread (new ThreadEjemplo(), "Juan").start();
System.out.println ("Termina thread main");
}}

Obsrvese en este caso:


-

Se implementa la interface Runnable en lugar de extender la clase Thread.


El constructor que haba antes no es necesario.
En el main obsrvese la forma en que se crea el thread. Esa expresin es equivalente a:

ThreadEjemplo ejemplo = new ThreadEjemplo ();


Thread thread = new Thread (ejemplo, "Pepe"); thread.start ();

Primero se crea la instancia de nuestra clase.

Despus se crea una instancia de la clase Thread, pasando como parmetros la


referencia de nuestro objeto y el nombre del nuevo thread.

Por ltimo se llama al mtodo start de la clase thread. Este mtodo iniciar el nuevo
thread y llamar al mtodo run () de nuestra clase.

Por ltimo, obsrvese la llamada al mtodo getName () desde run (). getName es un
mtodo de la clase Thread, por lo que nuestra clase debe obtener una referencia al
thread propio. Es lo que hace el mtodo esttico currentThread () de la clase Thread.

Vous aimerez peut-être aussi