muerto: se ha detenido definitivamente, ya sea porque se terminó el programa o mediante el llamado a stop().
En este ejemplo hemos creado un thread asignándole simultáneamente un objeto que lo utiliza (new Amigo("Juan")), y seguidamente lo hemos activado, llamando al método start(). Este método se encarga de inicializar el thread y, finalmente, llamar al método run() que hemos implementado.
De este modo, todo ocurre como si los métodos run() de cada objeto se ejecutaran en paralelo, concurrentemente. La forma de manejar esto depende del sistema operativo.
El método join() que llamamos al final hace que el programa principal espere hasta que este thread esté "muerto" (finalizada su ejecución). Este método puede disparar la excepción InterruptedException, por lo que lo hemos tenido en cuenta en el encabezamiento de la clase.
En nuestro ejemplo, simplemente a cada instancia de Amigo(...) que creamos la hemos ligado a un thread y puesto a andar. Corren todas en paralelo hasta que mueren de muerte natural, y también el programa principal acaba.
Cuando usamos Thread.yield() (que en rigor debería ser Thread.currentThread().yield(), pero siendo algo de uso muy común los desarrolladores de Java lo han simplificado), simplemente el thread actual le permite al procesador dedicarse a otro (si es que hay alguno deseando utilizar sus servicios).
La clase Amigo() es muy simple y con lo que hemos visto hasta ahora no creo que tengamos que explicar nada más.
Y los applets... ?
También podemos usar estos conceptos en los applets. Veamos un ejemplo para terminar la clase de hoy, muy similar al anterior, donde tres contadores cuentan (en un sistema preemptivo) en forma simultánea. Recuerden crear una página HTML con el tag
<applet code="Ejemplo20.class" width=300 height=100></applet>
para poder verlo en acción con el appletviewer o su browser favorito (que desde ya supongo que soporta Java! ;-)
El programa es extremandamente sencillo, y pueden verlo en acción si lo desean cargando via Internet la página:
http://www.amarillas.com/rock/java/Ejemplo20.htm
// Ejemplo de applet que usa multithreading
import java.awt.*;
import java.applet.*;
public class Ejemplo20 extends Applet {
TextField tfa,tfb,tfc;
public void init() {
setLayout(new GridLayout(3,2));
tfa = new TextField("0");
tfb = new TextField("0");
tfc = new TextField("0");
add(new Label("Contador A"));
add(tfa);
add(new Label("Contador B"));
add(tfb);
add(new Label("Contador B"));
add(tfc);
}
public void start() {
Thread A = new Thread (new Counter(tfa));
Thread B = new Thread (new Counter(tfb));
Thread C = new Thread (new Counter(tfc));
A.start();
B.start();
C.start();
}
}
class Counter implements Runnable {
TextField texto;
String s;
public Counter(TextField txtf) {
texto = txtf;
}
public void run() {
for (int i=0; i<1000; i++) {
texto.setText(s.valueOf(i));
}
}
}
Usuarios que han visto este tema también han visto...
- Forzar la Finalización y la Recolección de Basura en Java
- Utilerias Java
- Leer y escribir en un Socket en Java
- Terminación del constructor en Java
- Escribir en un archivo o consola con Java
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.