Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Practica de Laboratorio No. 2 Profr: María del Carmen Cerón Garnica Alumno: Roberto Alejandro Bravo Arredondo Matricula: 200824268 05 de septiembre de 2011 Introducción Esta práctica nos enseñará cómo establecer las prioridades de los hilos, ya sea mediante el método setPriority() y el número correspondiente a la prioridad o utilizando MIN_PRIORITY, MAX_PRIORITY, NORM_PRIORITY, así como también mediante el método getName() podemos obtener el nombre que le asigna Java a un hilo. También veremos como dormir un hilo, mediante el método sleep(). Objetivo Esta práctica tiene como objetivo mostrarnos como dormir hilos, el nombre que le asigna Java a un hilo, establecer y mostrarnos la prioridad de cada hilo. Código Elaborar un programa que obtenga las prioridades de 3 hilos, estableciendo al primer hilo la prioridad más baja, al segundo la prioridad más alta y al tercero la prioridad normal. 1) Utilizando el método setPriority(): import java.io.*; public class A implements Runnable { String palabra; public A (String _palabra) { palabra = _palabra; } public void run () { for (int i=0;i<5;i++) System.out.println (palabra); } public static void main (String args[]) { A h1 = new A("Soy el hilo 1"); A h2 = new A("Soy el hilo 2"); A h3 = new A("Soy el hilo 3"); Thread t1 = new Thread (h1); Thread t2 = new Thread (h2); Thread t3 = new Thread (h3); t1.start(); t1.setPriority(1); System.out.println ("Nombre asignado por Java para t1: "+t1.getName()); System.out.println ("Prioridad de t1: "+t1.getPriority()); t2.start(); t2.setPriority(10); System.out.println ("Nombre asignado por Java para t2: "+t2.getName()); System.out.println ("Prioridad de t2: "+t2.getPriority()); t3.start(); t3.setPriority(5); System.out.println ("Nombre asignado por Java para t3: "+t3.getName()); System.out.println ("Prioridad de t3: "+t3.getPriority()); } } 2) Utilizando MIN_PRIORITY, MAX_PRIORITY y NORM_PRIORITY: import java.io.*; public class A implements Runnable { String palabra; public A (String _palabra) { palabra = _palabra; } public void run () { for (int i=0;i<5;i++) System.out.println (palabra); } public static void main (String args[]) { A h1 = new A("Soy el hilo 1"); A h2 = new A("Soy el hilo 2"); A h3 = new A("Soy el hilo 3"); Thread t1 = new Thread (h1); Thread t2 = new Thread (h2); Thread t3 = new Thread (h3); t1.start(); t1.setPriority(Thread.MIN_PRIORITY); System.out.println ("Nombre asignado por Java para t1: "+t1.getName()); System.out.println ("Prioridad de t1: "+t1.getPriority()); t2.start(); t2.setPriority(Thread.MAX_PRIORITY); System.out.println ("Nombre asignado por Java para t2: "+t2.getName()); System.out.println ("Prioridad de t2: "+t2.getPriority()); t3.start(); t3.setPriority(Thread.NORM_PRIORITY); System.out.println ("Nombre asignado por Java para t3: "+t3.getName()); System.out.println ("Prioridad de t3: "+t3.getPriority()); } } 3) A continuación se muestra el método Sleep() para dormir un hilo. Además se inicializa con start(): public class Hilo extends Thread { public Hilo(String str) { super(str); } public void run() { for(int i=0; i<10; i++) { System.out.println(i+" "+getName()); try { sleep ((long)(Math.random()*1000)); } catch (InterruptedException e) {} } System.out.println("FIN!"+getName()); } } public class Demo { public static void main (String[] args) { Hilo uno,dos; uno=new Hilo("Jamaica"); dos=new Hilo("Fiji"); uno.start(); dos.start(); System.out.println("Main no hace nada"); } } 4) Este programa es el mismode arriba solo que modificamos la clase demo, donde cambiamos start() por run(): public class Hilo extends Thread { public Hilo(String str) { super(str); } public void run() { for(int i=0; i<10; i++) { System.out.println(i+" "+getName()); try { sleep ((long)(Math.random()*1000)); } catch (InterruptedException e) {} } System.out.println("FIN!"+getName()); } } public class Demo { public static void main (String[] args) { Hilo uno,dos; uno=new Hilo("Jamaica"); dos=new Hilo("Fiji"); uno.run (); dos.run(); System.out.println("Main no hace nada"); } } Corridas de los Programas 1) 2) 3) 4) Conclusión Se puede apreciar que en los 2 primeros programas los métodos para asignar la prioridad de los hilos ya sean con número o con las palabras reservadas funcionan exactamente igual. Y en los programas 3 y 4 podemos ver como se duermen los hilos con el método sleep() y la ejecución de éstos tanto con “start” como con “run”, la diferencia radica en que con el ultimo los hilos se ejecutan en orden, osea, uno termina y empieza a la ejecución del siguiente, tal y como lo vemos en las capturas de pantalla… Reflexión Personal Esta práctica me enseño principalmente el cómo dormir los hilos y sus tipos de ejecución, con start y con run…