Hilos

Hilos

 

Un Hilo es un flujo de ejecución, con un comienzo y un fin, de una tarea. Todos los programas manejan un hilo y la ejecución depende de las condiciones en las que fue diseñado.

 

Cuando se ejecuta un applet, es deseable, ver como va el avance del proceso o como se desempeña un algoritmo en su ejecución. Dado que Java realiza la tarea de ejecución de este hilo, solo presentará algunos resultados. Normalmente en la ejecución, de un applet veremos el inicio y fin.

 

Una alternativa es crear nuestro propio hilo para realizar la ejecución de nuestro applet. La clase Thread, permite crear nuestros propios hilos y así controlar el flujo de ejecución.

 

La clase Thread, contiene los siguientes métodos para controlar la ejecución.

 

public void run()

 

Este método es invocado a tiempo de ejecución. Uno puede sobre escribir este método y proveer el código que uno quiere que se ejecute al correr el hilo.

 

public void start()

 

Arranca el hilo, lo cual provoca que el método run() sea invocado.

 

public void stop()

 

Detiene la ejecución de un hilo.

 

public void resume()

 

Reanuda la ejecución de un hilo.

 

public static void sleep(long t)

 

Detiene temporalmente la ejecución de un hilo un tiempo dado por la variable t, en milisegundos.

 

public void interrupt()

 

Interrumpe la ejecución de un hilo.

 

public static boolean isInterrupted()

 

Prueba si el hilo en ejecución ha sido interrumpido.

 

public boolean isAlive()

 

Prueba si un hilo esta corriendo.

 

public void setPriority(int p)

 

Asigna prioridad p a un hilo.

 

Ejemplo 1.

 

El siguiente código muestra a un texto moviéndose a lo largo de la pantalla (ver ejecución).

 

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

 

public class Applet2 extends Applet implements Runnable

{

  Thread hilo = null;

  int x, y;

 

  public void init()

  {

    x = 10;

    y = 100;

  }

 

  public void start()

  {

    if(hilo == null)

    {

      hilo = new Thread(this);

      hilo.start();

    }

  }

 

  public void paint(Graphics g)

  {

     //start();

     g.drawString("Hola Mundo", x, y);

 

  }

 

  public void run()

  {

    principal();

    hilo.interrupt();

    hilo = null;

  }

 

  // **************************************************************************

 

  void pausa(int m) {

    repaint();

 

    try {

      Thread.sleep(m);

    }

    catch (InterruptedException e) {}

    ;

  }

 

  // **************************************************************************

 

  void principal()

  {

     for(int i=0; i< 100; i++)

     {

       x = x + i;

       repaint();

       pausa(300);

     }

  }

}

 

 

Ejemplo 2.

 

El siguiente código de Java muestra la ejecución de un hilo. Este hilo fue diseñado para mostrar como se modifica las curva y=2x-2 y z = m, donde m es una variable. (ver ejecución)

 

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

 

public class Applet1 extends Applet implements Runnable

{

  Thread hilo = null;

  grafica g;

 

  public void init()

  {

    g = null;

  }

 

  public void start()

  {

    if(hilo == null)

    {

      hilo = new Thread(this);

      hilo.start();

    }

  }

 

  public void paint(Graphics g)

  {

     start();

     g.drawString("dibujando", 100,100);

  }

 

  public void run()

  {

    principal();

    hilo.interrupt();

    hilo = null;

  }

 

  // **************************************************************************

 

  void pausa(int m) {

    repaint();

 

    try {

      Thread.sleep(m);

    }

    catch (InterruptedException e) {}

    ;

  }

 

  // **************************************************************************

 

  void principal()

  {

    double x[] = new double[10];

    double y[] = new double[10];

    double z[] = new double[10];

    double m = 0;

 

    for(int it=0; it<10; it++)

    {                       

      g = new grafica("salida");

      for(int i=0; i<10; i++)

      {

        x[i] = i;

        y[i] = 2*x[i] - 2;

        z[i] = m;

      }

      m += 1;

      g.SerieX(x);

      g.SerieY(y);

      g.SerieX(z);

      g.SerieY(x);

      g.show();

      pausa(300);

      g.dispose();

    }

  }

}

 

 

Regresar.