INGENIERIA DE SISTEMAS PROGRAMACION II (GRUPO 1) THREADS (Multihilos) Los threads (hilos) permiten realizar procesos paralelos en un programa en java. El código que realiza el verdadero trabajo de un hilo se coloca un su método run(), El método run puede supeditarse en una subclase de Thread o bien en un objeto Runnable (ejecutable): Runnable es una interface importante de java. Un programa inicia la ejecución de un hilo invocando al método start() de ese hilo; a su vez el método start() invoca al método run(). El método estático sleep (dormir) se invoca con un argumento que especifica durante cuanto tiempo el hilo que se está ejecutando debe dormir (en segundos). Ejemplo 1. (número que se incrementa automáticamente) import java.awt.*; import java.applet.*; public class EjemploHilos extends Applet implements Runnable{ Thread hilo=new Thread(this); //declaración del hilo int n=0; //el número que ira aumentando public void init() { this.setSize(300,300); hilo.start(); //inicia la ejecución del hilo } public void paint(Graphics g) { g.drawString(n+"", 20, 20); } public void run() { while(1==1) //bucle infinito { n++; repaint(); try { hilo.sleep(500); //tiempo que dormira el hilo } catch(InterruptedException e) { System.out.print("error"); } } } } Ejemplo 2 (circulo en movimiento) import java.awt.*; import java.applet.*; public class EjemploHilos extends Applet implements Runnable{ Thread hilo=new Thread(this); //declaración del hilo int x=30,y=30; //posiciones del circulo; public void init() { this.setSize(300,300); hilo.start(); //inicia la ejecución del hilo } public void paint(Graphics g) { g.fillOval(x,y,20,20); } public void run() { while(1==1) //bucle infinito { x=x+5; y=y+5; repaint(); try { hilo.sleep(500); //tiempo que dormira el hilo } catch(InterruptedException e) { System.out.print("error"); } } } } Ejemplo 2 (El ejemplo anterior con control de teclas) import java.awt.*; import java.applet.*; public class EjemploHilos extends Applet implements Runnable{ Thread hilo=new Thread(this); //declaración del hilo int x=30,y=30; //posiciones del circulo; int direccion=1; //1 abajo 2 arriba 3 izquierda 4 derecha public void init() { this.setSize(300,300); hilo.start(); //inicia la ejecución del hilo } public void paint(Graphics g) { g.fillOval(x,y,20,20); } public void run() { while(1==1) //bucle infinito { if(direccion==1) y=y+5; if(direccion==2) y=y-5; if(direccion==3) x=x-5; if(direccion==4) x=x+5; repaint(); try { hilo.sleep(50); //tiempo que dormira el hilo } catch(InterruptedException e) { System.out.print("error"); } } } public boolean keyDown(Event e,int key) { if(key==1005) direccion=1; if(key==1004) direccion=2; if(key==1006) direccion=3; if(key==1007) direccion=4; return true; } } EJEMPLO 3 (Cargar Imagen) import java.awt.*; import java.applet.*; import javax.swing.*; public class prueba extends Applet{ Image im1=new ImageIcon(getClass().getResource("figura.gif")).getImage(); public void init() { this.setSize(500,500); this.setBackground(Color.BLUE); //cambia el color del fondo this.setVisible(true); } public void paint(Graphics g) { g.drawImage(im1,30,30,this); } }