La clase anterior usamos, en el último ejemplo, un concepto al que vamos a dedicar ahora nuestra atención: los threads.
La traducción literal de thread es hilo o hebra, y se utiliza también para referirse al hilo de un discurso. El concepto de threads en los ambientes y sistemas operativos es un poco complejo de explicar pero sencillo de entender: independientemente del sistema elegido, puede pensarse que un thread es algo así como el lugar de ejecución de un programa.
En la mayoría de los programas que hemos visto, hemos usado un solo thread; es decir que un programa comienza y su ejecución sigue un camino único: como un monólogo.
Java es multithreading. Esto significa algo así como que tiene capacidad de diálogo, y más aún: puede ejecutar muchos threads en paralelo, como si tratáramos de una conversación múltiple y simultánea.
No confundir aquí multithreading con la capacidad de ejecutar varios programas a la vez. Esta es una posibilidad, pero también un mismo programa puede utilizar varios threads ("caminos de ejecución"?) simultáneamente.
Esto, por supuesto, depende fundamentalmente de la capacidad del sistema operativo para soportar multithreading, y por esto Java no puede ejecutarse (al menos en forma completa) en sistemas que no lo soporten.
El uso de threads nos permite, por ejemplo, ejecutar simultáneamente varios programas que interactúen entre ellos; o, también, que un programa, mientras por ejemplo actualiza la pantalla, simultáneamente realice una serie de cálculos sin tener que hacer esperar el usuario.
Una forma sencilla de verlo es imaginar que tenemos un grupo de microprocesadores que pueden ejecutar, cada uno, un solo thread; y nosotros asignamos programas (o partes de programas) a cada uno de ellos. Además, podemos imaginar que esos microprocesadores comparten una memoria común y recursos comunes, de lo que surgirá una serie de problemas importantes a tener en cuenta cuando se usan threads.
Hay tres cosas a tener en cuenta para usar threads en un programa:
La interface Runnable, simplemente definida como:
public interface java.lang.Runnable
{
// Methods
public abstract void run();
}
le asegura al compilador que nuestra clase (la que utilizará el thread para ejecutarse) dispone de método run().
Vamos a ver un par de ejemplos, primero una aplicación standalone y luego un applet.
Reunión de Amigos
El siguiente ejemplo (Ejemplo19.java) usa threads para activar
simultáneamente tres objetos de la misma clase, que comparten los recursos del procesador peleándose para escribir a la pantalla.
class Ejemplo19 {
public static void main(String argv[])
throws InterruptedException {
Thread Juan = new Thread (new Amigo("Juan"));
Thread Luis = new Thread (new Amigo("Luis"));
Thread Nora = new Thread (new Amigo("Nora"));
Juan.start();
Luis.start();
Nora.start();
Juan.join();
Luis.join();
Nora.join();
}
}
class Amigo implements Runnable {
String mensaje;
public Amigo(String nombre) {
mensaje = "Hola, soy "+nombre+" y este es mi mensaje ";
}
public void run() {
for (int i=1; i<6; i++) {
String msg = mensaje+i;
System.out.println(msg);
}
}
}
Usuarios que han visto este tema también han visto...
- Tomcat, Java y PostgreSQL
- Como crear una aplicación con Struts paso a paso en Java
- Sockets en Java
- Terminación del constructor en Java
- Traducir nombres de host a direcciones de Internet
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.