Download prioridades de hilos

Document related concepts
no text concepts found
Transcript
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…