Hilos: Time Applet

  1. Un ordenador puede ejecutar varios procesos "simultáneamente" compartiendo el tiempo del CPU. Varios hilos (threads) pueden ejecutarse "simultáneamente" dentro de un mismo proceso. Esta técnica es llamada multihilo.
  2. Para controlar los hilos en Java se utilizan los siguientes métodos:


  3. Para crear un hilo el programador define una clase que extiende la clase Thread que es parte del java.lang package.
  4. El método sleep( ) de la clase Thread puede ser utilizado para pausar un hilo por determinada cantidad de milisegundos. Cuando se usa este método debemos manejar la excepción que produce al interrumpir el programa antes de su terminación normal.
  5. En Java una subclase no puede ser heredera de dos o más clases simultáneamente. Como alternativa se utilizan las interfases, que son un conjunto de métodos. Esto es usual cuando se quiere construir un Applet que a su vez sea una subclase de la clase Thread.
  6. Crear, estudiar y correr el Applet TimeApplet.

TimeApplet.java

import java.applet.*;

import java.awt.*;

public class TimeApplet extends Applet implements Runnable
{
            private String msg1 = new String("El tiempo corre...");
            private String msg2 = new String("...¡no pierdas tiempo!");
            private Font bigFont = new Font("Arial", Font.ITALIC, 24);
            private int secs;
            private Thread clock;
            public void init( )
            {
                        if (clock == null)
                        {
                                    clock = new Thread(this);
                                    clock.start();
                        }
            }
            public void run( )
            {
                        while(true)
                        {
                                    repaint();
                                    try
                                    {
                                                clock.sleep(1000);
                                    }
                                    catch(InterruptedException e) {}
                        }
            }
            public void stop( )
            {
                        clock.suspend();
            }
            public void start()
            {
                        clock.resume();
            }
            public void destroy()
            {
                        clock.stop();
            }
            public void paint(Graphics gr)
            {
                        ++secs;
                        gr.setFont(bigFont);
                        gr.setColor(Color.magenta);
                        gr.drawString(msg1,10,100);
                        gr.drawString("Tiempo transcurrido: "+secs+" segundos",10,130);
                        gr.drawString(msg2,10,160);
            }
}

Crear un fichero HTML para ejecutarlo, que contenga:

         <applet
          code=TimeApplet.class
          width=700
          height=500 MAYSCRIPT>
         </applet>

El applet usa el hilo del sistema por omisión, mientras que el reloj usa el hilo creado por el usuario. Sin aplicar la técnica de multihilos, el applet parecería estar congelado, pues no puede simultáneamente atender el ciclo while (infinito) y aplicar el método repaint( ).

Ejercicios

  1. Modificar el TimeApplet para que cada sesenta segundos cuente (y muestre) un minuto.
  2. Crear un applet que muestre su nombre moviéndose de izquierda a derecha horizontalmente.
  3. Agregue un botón de arranque al applet anterior.
  4. Modifique el applet anterior para que el botón inicie el movimiento con el primer clic y lo detenga con el segundo.
  5. Crear un applet que muestre un rectángulo descendiendo por un plano inclinado.
  6. Crear un applet que muestre un circulo moviéndose diagonalmente. Al alcanzar un borde de la ventana del applet el circulo debe rebotar de manera tal que el ángulo de incidencia sea igual al de reflexión.


Última actualización: 23 de febrero de 2004
abia@dlsi.ua.es