• Lunes 23 de Diciembre de 2024, 08:27

Autor Tema:  Hilos  (Leído 2459 veces)

Ric_Monje

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Hilos
« en: Viernes 9 de Mayo de 2008, 05:42 »
0
Pues me intereza mucho el tema de Hilos y pues me seria de gran ayuda que uds me pudieran colaborar con ejemplos de codigo fuente relacionado con el tema..Gracias


manix

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Re: Hilos
« Respuesta #1 en: Viernes 9 de Mayo de 2008, 05:53 »
0
Para conseguir que Java haga varias cosas a la vez o que el programa no se quede parado mientras realiza una tarea compleja, tenemos los hilos (Threads).

Bueno... Te voy a colaborar con un ejemplo clasico del uso de hilos. Adentro viene una explicacion hacerca de el uso de los hilos

PD; el ide que use fue netbeans
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Ric_Monje

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Hilos
« Respuesta #2 en: Viernes 9 de Mayo de 2008, 07:05 »
0
Gracias amigo, ahora mismo lo miro, y lo estudio con detenimiento; y en base a este, voya  trabajar unos basicos y aqui estare montando el fruto de mi estudio  :smartass:


manix

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Re: Hilos
« Respuesta #3 en: Viernes 9 de Mayo de 2008, 07:13 »
0
exc, si tienes una duda con respecto al codigo ya sabes que hacer.. es que casi no esta documentado :P

Ric_Monje

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Hilos
« Respuesta #4 en: Domingo 11 de Mayo de 2008, 22:45 »
0
Bueno, pocoa poco voya prendiendo mas de estetema, gracias a internet y a la informacion y codigo que me dono manix.

Poco a poco voy haciendo programitas relacionados con Hilosy pues a medida que aprendo los voya  ir montando.

Código: Text
  1.  
  2. public class MiHilo extends Thread{
  3.  
  4.   public void run (){
  5.  
  6.     for (int i=0; i< 10; i++){
  7.    
  8.     System.out.println(i);
  9.     }  
  10.  
  11.   }
  12.  
  13.   public static void main (String arg[]){
  14.     MiHilo a = new MiHilo ();
  15.     MiHilo b = new MiHilo ();
  16.  
  17.     a.start();
  18.     b.start();
  19.   }
  20. }
  21.  
  22.  


Ric_Monje

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Hilos
« Respuesta #5 en: Domingo 11 de Mayo de 2008, 22:51 »
0
Bueno aqui va mi segundo programa trabajando con Hilos, son algo basicos, pero poco apoco espero ir aprendiendo.

CLASE Data

Código: Text
  1.  
  2.  
  3. public class Data {
  4.   private int x;
  5.  
  6.   public Data() {
  7.     this.x = x;
  8.   }
  9.  
  10.   public int getx() {
  11.     return x;
  12.   }
  13.  
  14.   public void setx(int x) {
  15.     this.x = x;
  16.   }
  17.  
  18. }
  19.  
  20.  

CLASE MiHil


Código: Text
  1.  
  2.  
  3. public class MiHil extends Thread{
  4.   private Data d;
  5.  
  6.   public MiHil(Data m){
  7.     d=m;
  8.   }
  9.   public void run(){
  10.     synchronized(d){
  11.       int z;
  12.       z=d.getx();
  13.       z=z+1;
  14.       d.setx(z);
  15.     }
  16.     System.out.println(d.getx());
  17.   }
  18.   public static void main(String agr[]){
  19.     Data p=new Data();
  20.     p.setx(1);
  21.     MiHil a = new MiHil (p);
  22.     MiHil b = new MiHil (p);
  23.     a.start();
  24.     b.start();
  25.   }
  26.  
  27. }
  28.  
  29.  

Con timepo, montare los que valla haciendo


frealgagu

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
    • http://frealgagu.4shared.com
Re: Hilos
« Respuesta #6 en: Miércoles 14 de Mayo de 2008, 23:13 »
0
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
  1.  
  2. import java.applet.*;
  3. import java.awt.*;
  4.  
  5. public class Hilos extends Applet
  6. {
  7.   Hilo hilo1;
  8.   Hilo hilo2;
  9.   Hilo hilo3;
  10.   Hilo hilo4;
  11.   Hilo hilo5;
  12.   Hilo hilo6;
  13.   public void init()
  14.   {
  15.     hilo1=new Hilo();
  16.     hilo2=new Hilo();
  17.     hilo3=new Hilo();
  18.     hilo4=new Hilo();
  19.     hilo5=new Hilo();
  20.     hilo6=new Hilo();
  21.     hilo1.start();
  22.     hilo2.start();
  23.     hilo3.start();
  24.     hilo4.start();
  25.     hilo5.start();
  26.     hilo6.start();
  27.    
  28.     new Repintar(this).start();
  29.   }
  30.    
  31.   public void update(Graphics c)
  32.   {
  33.     //Doble Buffer
  34.     Image dibujo=createImage(800,600);
  35.     Graphics g=dibujo.getGraphics();
  36.    
  37.     g.setColor(Color.blue);
  38.     g.fillRect(hilo1.getX(),hilo1.getY(),50,50);
  39.     g.setColor(Color.red);
  40.     g.fillRect(hilo2.getX(),hilo2.getY(),50,50);
  41.     g.setColor(Color.green);
  42.     g.fillRect(hilo3.getX(),hilo3.getY(),50,50);
  43.     g.setColor(Color.gray);
  44.     g.fillRect(hilo4.getX(),hilo4.getY(),50,50);
  45.     g.setColor(Color.cyan);
  46.     g.fillRect(hilo5.getX(),hilo5.getY(),50,50);
  47.     g.setColor(Color.magenta);
  48.     g.fillRect(hilo6.getX(),hilo6.getY(),50,50);
  49.    
  50.     //Doble Buffer
  51.     c.drawImage(dibujo,0,0,null);
  52.   }
  53.  
  54. }
  55. class Hilo extends Thread
  56. {
  57.   int x,y;
  58.   Hilo()
  59.   {
  60.     x=320;
  61.     y=240;
  62.   }
  63.   public int getX()
  64.   {
  65.     return x;
  66.   }
  67.   public int getY()
  68.   {
  69.     return y;
  70.   }
  71.   public void run()
  72.   {
  73.     while(true)
  74.     {
  75.       int direccion=(int)(Math.random()*4);
  76.       if(direccion==0)
  77.         x+=10;
  78.       else if(direccion==1)
  79.         x-=10;
  80.       else if(direccion==2)
  81.         y-=10;
  82.       else
  83.         y+=10;
  84.       try
  85.       {
  86.         sleep(100);
  87.       }catch(Exception e)
  88.       {
  89.         System.out.println(""+e);
  90.       }
  91.     }
  92.   }
  93. }
  94. class Repintar extends Thread
  95. {
  96.   Hilos principal;
  97.   Repintar(Hilos principal)
  98.   {
  99.     this.principal=principal;
  100.   }
  101.   public void run()
  102.   {
  103.     while(true)
  104.       principal.repaint();
  105.   }
  106. }
  107.  
  108.  
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

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Hilos
« Respuesta #7 en: Jueves 15 de Mayo de 2008, 02:28 »
0
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
  1.  
  2. import java.awt.event.MouseEvent;
  3. import java.awt.event.MouseListener;
  4. import java.util.Vector;
  5.  
  6. import javax.swing.*;
  7.  
  8.  
  9. public class Ventana extends JFrame implements Runnable {
  10.  
  11.   private boolean g= false;
  12.   private JLabel j= new JLabel();  
  13.   private Vector <ImageIcon> imagenes= new Vector<ImageIcon>();
  14.   private int i=0;
  15.  
  16.   public Ventana(){
  17.     this.setTitle("Buuuuuuu");
  18.     this.setBounds(200, 150, 200, 200);
  19.     j.setBounds(200, 150, 200, 200);
  20.     this.add(j);
  21.     j.addMouseListener(new MouseListener(){
  22.  
  23.       public void mouseClicked(MouseEvent e) {
  24.         int x=e.getX();
  25.         int y=e.getY();
  26.         if(x<=350){
  27.           g=true;
  28.         }
  29.        
  30.       }
  31.  
  32.       public void mouseEntered(MouseEvent e) {
  33.      
  34.        
  35.       }
  36.  
  37.       public void mouseExited(MouseEvent e) {
  38.      
  39.        
  40.       }
  41.  
  42.       public void mousePressed(MouseEvent e) {
  43.      
  44.        
  45.       }
  46.  
  47.       public void mouseReleased(MouseEvent e) {
  48.      
  49.        
  50.       }
  51.      
  52.     });
  53.  
  54.   }
  55.  
  56.  
  57.   public static void main(String arg[]){
  58.     Ventana a= new Ventana ();
  59.     a.setVisible(true);
  60.     Thread t = new Thread( a );
  61.     t.start();
  62.   }
  63.  
  64.  
  65.   public void run(){
  66.  
  67.     ImageIcon e= new ImageIcon();
  68.     ImageIcon d= new ImageIcon ("java_starting.jpg");
  69.     ImageIcon b= new ImageIcon ("t_java_logo.jpg");
  70.     ImageIcon c= new ImageIcon ("ComfyChairRadSmall-full.jpg");
  71.     ImageIcon a= new ImageIcon ("javatrap.jpg");
  72.     imagenes.add(a);
  73.     imagenes.add(b);
  74.     imagenes.add(c);
  75.     imagenes.add(d);
  76.     for(int f=0; f<=100 && g==false;f++){
  77.       if(i==4){
  78.         i=0;
  79.       }
  80.       try {
  81.         Thread.sleep(600);
  82.       } catch (InterruptedException e1) {
  83.         e1.printStackTrace();
  84.       }
  85.       j.setIcon(imagenes.get(i));
  86.       i+=1;
  87.     }
  88.  
  89.   }
  90.  
  91. }
  92.  
  93.  

En el metodo run, solo es que cambien las imagenes jpg por una que uds quieran  :whistling:


frealgagu

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
    • http://frealgagu.4shared.com
Re: Hilos
« Respuesta #8 en: Viernes 16 de Mayo de 2008, 10:38 »
0
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

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: Hilos
« Respuesta #9 en: Martes 20 de Mayo de 2008, 05:46 »
0
Poco a poco se va rpendiendo

Código: Text
  1.  
  2.  
  3. // Varios subprocesos imprimiendo en distintos intervalos.
  4.  
  5. public class ProbadorSubprocesos {
  6.  
  7.    public static void main( String [] args )
  8.    {
  9.       // crear y nombrar a cada subproceso
  10.       ImprimirSubproceso subproceso1 = new ImprimirSubproceso( "subproceso1" );
  11.       ImprimirSubproceso subproceso2 = new ImprimirSubproceso( "subproceso2" );
  12.       ImprimirSubproceso subproceso3 = new ImprimirSubproceso( "subproceso3" );
  13.        
  14.       System.err.println( "Iniciando subprocesos" );
  15.        
  16.       subproceso1.start(); // iniciar subproceso1 y colocarlo en estado listo
  17.       subproceso2.start(); // iniciar subproceso2 y colocarlo en estado listo
  18.       subproceso3.start(); // iniciar subproceso3 y colocarlo en estado listo
  19.        
  20.       System.err.println( "Subprocesos iniciados, termina main\n" );
  21.        
  22.    } // fin de main
  23.    
  24. } // fin de la clase ProbadorSubprocesos
  25.  
  26. // la clase ImprimirSubproceso controla la ejecución de los subprocesos
  27. class ImprimirSubproceso extends Thread {
  28.    private int tiempoInactividad;
  29.    
  30.    // asignar nombre a subproceso, llamando al constructor de la superclase
  31.    public ImprimirSubproceso( String nombre )
  32.    {
  33.       super( nombre );
  34.        
  35.       // elegir tiempo de inactividad aleatorio entre 0 y 5 segundos
  36.       tiempoInactividad = ( int ) ( Math.random() * 5001 );
  37.    }        
  38.    
  39.    // el método run es el código a ejecutar por el nuevo subproceso
  40.    public void run()
  41.    {
  42.       // colocar subproceso en inactividad durante el tiempo indicado por tiempoInactividad
  43.       try {
  44.          System.err.println(
  45.             getName() + " va a estar inactivo durante " + tiempoInactividad );
  46.            
  47.          Thread.sleep( tiempoInactividad );
  48.       }
  49.        
  50.       // si el subproceso se interrumpió durante su inactividad, imprimir rastreo de la pila
  51.       catch ( InterruptedException excepcion ) {
  52.          excepcion.printStackTrace();
  53.       }
  54.        
  55.       // imprimir nombre del subproceso
  56.       System.err.println( getName() + " termino su inactividad" );
  57.    
  58.    } // fin del método run
  59.    
  60. } // fin de la clase ImprimirSubproceso
  61.  
  62.