Programación General > Java

 Hilos

<< < (2/2)

Ric_Monje:
Bueno aqui va mi segundo programa trabajando con Hilos, son algo basicos, pero poco apoco espero ir aprendiendo.

CLASE Data


--- Código: Text ---  public class Data {  private int x;   public Data() {    this.x = x;  }   public int getx() {    return x;  }   public void setx(int x) {    this.x = x;  } }  
CLASE MiHil


--- Código: Text ---  public class MiHil extends Thread{  private Data d;   public MiHil(Data m){    d=m;  }  public void run(){    synchronized(d){      int z;      z=d.getx();      z=z+1;      d.setx(z);    }    System.out.println(d.getx());  }  public static void main(String agr[]){    Data p=new Data();    p.setx(1);    MiHil a = new MiHil (p);    MiHil b = new MiHil (p);    a.start();    b.start();  } }  
Con timepo, montare los que valla haciendo

frealgagu:
Bien, esta fue una clase de Hilos que dicté en las asesorías que presto en la Universidad, lo diseñé de tal forma que se mostrara gráficamente (en un applet), aquí les explico el Ejemplo:

--- Código: Text --- import java.applet.*;import java.awt.*; public class Hilos extends Applet{  Hilo hilo1;  Hilo hilo2;  Hilo hilo3;  Hilo hilo4;  Hilo hilo5;  Hilo hilo6;  public void init()  {    hilo1=new Hilo();    hilo2=new Hilo();    hilo3=new Hilo();    hilo4=new Hilo();    hilo5=new Hilo();    hilo6=new Hilo();    hilo1.start();    hilo2.start();    hilo3.start();    hilo4.start();    hilo5.start();    hilo6.start();        new Repintar(this).start();  }      public void update(Graphics c)  {    //Doble Buffer    Image dibujo=createImage(800,600);    Graphics g=dibujo.getGraphics();        g.setColor(Color.blue);    g.fillRect(hilo1.getX(),hilo1.getY(),50,50);    g.setColor(Color.red);    g.fillRect(hilo2.getX(),hilo2.getY(),50,50);    g.setColor(Color.green);    g.fillRect(hilo3.getX(),hilo3.getY(),50,50);    g.setColor(Color.gray);    g.fillRect(hilo4.getX(),hilo4.getY(),50,50);    g.setColor(Color.cyan);    g.fillRect(hilo5.getX(),hilo5.getY(),50,50);    g.setColor(Color.magenta);    g.fillRect(hilo6.getX(),hilo6.getY(),50,50);        //Doble Buffer    c.drawImage(dibujo,0,0,null);  }  }class Hilo extends Thread{  int x,y;  Hilo()  {    x=320;    y=240;  }  public int getX()  {    return x;  }  public int getY()  {    return y;  }  public void run()  {    while(true)    {      int direccion=(int)(Math.random()*4);      if(direccion==0)        x+=10;      else if(direccion==1)        x-=10;      else if(direccion==2)        y-=10;      else        y+=10;      try      {        sleep(100);      }catch(Exception e)      {        System.out.println(&#34;&#34;+e);      }    }  }}class Repintar extends Thread{  Hilos principal;  Repintar(Hilos principal)  {    this.principal=principal;  }  public void run()  {    while(true)      principal.repaint();  }}  En realidad este programa nos muestra en un applet seis diferentes cuadrados de distinto color, que se van moviendo constantemente por la pantalla de manera aleatoria, par aconseguir esto, utilizo la clase Hilo que hereda de Thread e implemento el método run(), el cual contiene un ciclo infinito que me ira cambiando las coordenadas x e y de los diferentes cuadrados.
Dicionalmente utilizo una clase Repintar que hereda también de Thread, por medio del cual puedo repintar constantemente todos los cuadrados.
Espero sea de ayuda. Este ejemplo lo coloqué más para demostrar de una manera menos tediosa el funcionamiento de los hilos.

Ric_Monje:
frealgagu gracias por el ejemplo, de verdad me a sevido de mucha ayuda para mi apredisaje, ahora trabaje en una ventana que muestra 4 imagenes que van cambiando cada x timepo, y si se da clcik sobre la imagen para de cambiar...veanlo y opinen  :kicking:


--- Código: Text --- import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Vector; import javax.swing.*;  public class Ventana extends JFrame implements Runnable {   private boolean g= false;  private JLabel j= new JLabel();    private Vector &#60;ImageIcon&#62; imagenes= new Vector&#60;ImageIcon&#62;();  private int i=0;   public Ventana(){    this.setTitle(&#34;Buuuuuuu&#34;);    this.setBounds(200, 150, 200, 200);    j.setBounds(200, 150, 200, 200);    this.add(j);    j.addMouseListener(new MouseListener(){       public void mouseClicked(MouseEvent e) {        int x=e.getX();        int y=e.getY();        if(x&#60;=350){          g=true;        }              }       public void mouseEntered(MouseEvent e) {                    }       public void mouseExited(MouseEvent e) {                    }       public void mousePressed(MouseEvent e) {                    }       public void mouseReleased(MouseEvent e) {                    }          });   }    public static void main(String arg[]){    Ventana a= new Ventana ();    a.setVisible(true);    Thread t = new Thread( a );    t.start();  }    public void run(){     ImageIcon e= new ImageIcon();    ImageIcon d= new ImageIcon (&#34;java_starting.jpg&#34;);    ImageIcon b= new ImageIcon (&#34;t_java_logo.jpg&#34;);    ImageIcon c= new ImageIcon (&#34;ComfyChairRadSmall-full.jpg&#34;);    ImageIcon a= new ImageIcon (&#34;javatrap.jpg&#34;);    imagenes.add(a);    imagenes.add(b);    imagenes.add(c);    imagenes.add(d);    for(int f=0; f&#60;=100 && g==false;f++){      if(i==4){        i=0;      }      try {        Thread.sleep(600);      } catch (InterruptedException e1) {        e1.printStackTrace();      }      j.setIcon(imagenes.get(i));      i+=1;    }   } }  
En el metodo run, solo es que cambien las imagenes jpg por una que uds quieran  :whistling:

frealgagu:
Buen apunte, en realidad el trabajo con hilos facilita mucho la vida, cuando se quieren hacer tareas independientes al hilo de ejecución normal del programa, por ejemplo en la reproducción de sonidos internamente trabaja los hilos para que se reproduzca el sonido sin que se pause el funcionamiento normal del programa. Tambien puede funcionar cuando se utiliza algún procedimiento que utilice mucho tiempo.

Ric_Monje:
Poco a poco se va rpendiendo


--- Código: Text ---  // Varios subprocesos imprimiendo en distintos intervalos. public class ProbadorSubprocesos {    public static void main( String [] args )   {      // crear y nombrar a cada subproceso      ImprimirSubproceso subproceso1 = new ImprimirSubproceso( &#34;subproceso1&#34; );      ImprimirSubproceso subproceso2 = new ImprimirSubproceso( &#34;subproceso2&#34; );      ImprimirSubproceso subproceso3 = new ImprimirSubproceso( &#34;subproceso3&#34; );              System.err.println( &#34;Iniciando subprocesos&#34; );              subproceso1.start(); // iniciar subproceso1 y colocarlo en estado listo      subproceso2.start(); // iniciar subproceso2 y colocarlo en estado listo      subproceso3.start(); // iniciar subproceso3 y colocarlo en estado listo              System.err.println( &#34;Subprocesos iniciados, termina main&#092;n&#34; );           } // fin de main    } // fin de la clase ProbadorSubprocesos // la clase ImprimirSubproceso controla la ejecución de los subprocesosclass ImprimirSubproceso extends Thread {   private int tiempoInactividad;       // asignar nombre a subproceso, llamando al constructor de la superclase   public ImprimirSubproceso( String nombre )   {      super( nombre );              // elegir tiempo de inactividad aleatorio entre 0 y 5 segundos      tiempoInactividad = ( int ) ( Math.random() * 5001 );   }               // el método run es el código a ejecutar por el nuevo subproceso   public void run()   {      // colocar subproceso en inactividad durante el tiempo indicado por tiempoInactividad      try {         System.err.println(             getName() + &#34; va a estar inactivo durante &#34; + tiempoInactividad );                     Thread.sleep( tiempoInactividad );      }              // si el subproceso se interrumpió durante su inactividad, imprimir rastreo de la pila      catch ( InterruptedException excepcion ) {         excepcion.printStackTrace();      }              // imprimir nombre del subproceso      System.err.println( getName() + &#34; termino su inactividad&#34; );       } // fin del método run    } // fin de la clase ImprimirSubproceso  

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa