SlideShare una empresa de Scribd logo
Extending the Thread Class
Se puede crear un hilo escribiendo una
clase que extienda a la clase
java.lang.Thread y sobre escriba al
método run() en Thread.
La clase GuessANumber extiende a
Thread y escoge un número aleatoria
mente entre 1 y 100 hasta que adivine el
entero almacenado en el campo number.
public class GuessANumber extends Thread
{
private int number;
public GuessANumber(int number)
{
this.number = number;
}
public void run()
{
int counter = 0;
int guess = 0;
do
{
guess = (int) (Math.random() * 100 + 1);
System.out.println(this.getName() + " guesses " + guess);
counter++;
}while(guess != number);
System.out.println("** Correct! " + this.getName() + " in " + counter +
"guesses.**");
}
}
Extending the Thread Class
Cuando UD. extiende la clase Thread,
UD. se ahorra un paso cuando crea e
inicia un hilo por que un objeto Runnable
y un objeto Thread son objetos iguales.
( La clase Thread implementa la interface
Runnable, así cualquier clase hija de
Thread es también de tipo Runnable.)
Extending the Thread Class
El siguiente programa ThreadDemo
instancia dos objetos GuessANumber,
luego los inicia a ambos.
Cada hilo corre hasta que se adivine el
número 20, el cual toma un número
arbitrario de guesses.
public class ThreadDemo
{
public static void main(String [] args)
{
System.out.println("Pick a number between 1 and 100...");
GuessANumber player1 = new GuessANumber(20);
GuessANumber player2 = new GuessANumber(20);
player1.start();
player2.start();
}
}
Yielding Threads
Un hilo se mantiene invocando el método
yield() de la clase Thread , este se ve así:
public static void yield()
Este método causa que el hilo que corre
actualmente se detenga para que los
otros hilos tengan oportunidad de
ejecutarse.
Yielding Threads
La siguiente clase GuessANumber2
modifica a la clase GuessANumber al
agregar a yield() dentro del método run():
public class GuessANumber2 extends Thread{
private int number;
public GuessANumber2(int number){
this.number = number;
}
public void run(){
int counter = 0;
int guess = 0;
do{
Thread.yield();
guess = (int) (Math.random() * 100 + 1);
System.out.println(this.getName() + " guesses " + guess);
counter++;
}while(guess != number);
System.out.println("** Correct! " + this.getName() + " in " + counter +
" guesses.**");
}
}
Yielding Threads
Estudie el siguiente programa
YieldDemo y trate de determinar que
sucede cuando los tres hilos se inician.
public class YieldDemo
{
public static void main(String [] args)
{
System.out.println("Pick a number between 1 and
100...");
Thread player1 = new GuessANumber2(85);
Thread player2 = new GuessANumber2(85);
Thread player3 = new GuessANumber2(85);
player3.setPriority(Thread.MAX_PRIORITY);
player1.start();
player2.start();
player3.start();
}
}
Yielding Threads
Note que en el programa YieldDemo el
player3 tiene la prioridad máxima de un
Thread, la cual es de 10. Después de
cada guess, cada hilo invoca al método
yield(). Sin embargo, el player3 tiene una
prioridad alta, este no se mantiene para
permitir que los hilos placer1 o player2
entren al CPU.
Yielding Threads
El hilo player3 atrapa el CPU hasta que
termina su ejecución. Cuando el hilo del
player3 termina, los hilos player1 y player2
cortésmente toman su turno para obtener
su guessing number cada uno llama al
método yield() después de cada guess.
Yielding Threads
Si UD. desea que el hilo del player3
tenga una prioridad más baja, para
utilizar el CPU, el player3 se puede poner
a dormir por poco tiempo.
Use el método sleep() de la clase Thread
para causar que el hilo que actualmente
esta corriendo duerma:
public static void sleep( int millisec )
throws InterruptedException
Yielding Threads
Veamos cual es el efecto que sleep()
tiene en la clase GuessANumber2, al
acambiar el llamado a Thread.yield() por
lo siguiente:
try
{
Thread.sleep(1);
}match(InterruptedException e) {}
Methods of the Thread Class
Veamos en detalles los métodos de la
clase Thread.
La clase Thread tiene muchos métodos
útiles para determinar y cambiar la
información acerca de un hilo, incluyendo:
Methods of the Thread Class
public void start(). Inicia un hilo en un
sendero de ejecución, luego invoca al método
run() en este objeto Thread.
public void run(). Si este objeto Thread fue
instanciado usando un destino Runnable por
separado, el método run() es invocado en este
objeto Runnable. Si UD. Escribe una clase que
extiende a Thread, el método sobre escrito
run() en la clase hija es invocado.
Methods of the Thread Class
public final void setName(String name).
Cambia el nombre del objeto Thread. También
existe el método getName() para obtener el
nombre.
public final void setDaemon( boolean on ).
Un parámetro true denota a este Thread como
un hilo demonio. Para el hilo que es un demonio,
este método debe ser invocado antes de que el
hilo inicie.
Methods of the Thread Class
public final void setPriority ( int priority ).
Asigna la prioridad de este objeto Thread. Los
posibles valores están entre 1 y 10. Sin
embargo los desarrolladores se animan a usar
los siguientes tres valores:
Thread.NORM_PRIORITY,
Thread.MIN_PRIORITY y
Thread.MAX_PRIORITY ( cuyos valores son 5,
1 y 10 respectivamente).
Methods of the Thread Class
public final void join(long millisec ). El hilo
actual invoca este método en un Segundo hilo,
causando que el hilo actual se bloquee hasta
que el Segundo hilo termine o espere el número
de milisegundos pasados.
public final boolean isAlive(). Retorna
true si el hilo esta vivo, lo cual es en cualquier
momento después de que es iniciado pero antes
de que este termine de correr
Methods of the Thread Class
Los métodos previos son invocados en un
objeto Thread particular.
Los siguientes métodos en la clase Thread son
static. Al invocar uno de los métodos static se
realizan operaciones en el hilo que corre
actualmente:
Methods of the Thread Class
public static void yield(). Causa que el actual
hilo que esta corriendo ceda ante cualquiera de
los otros hilos con la misma prioridad que
estén esperando para que se ponga en orden
de marcha.
public static void sleep( long millesec ).
Causa que el actual hilo se bloquee por lo
menos el número de milisegundos especificados.
Methods of the Thread Class
public static boolean holdsLock( Object x).
Retorna true si el hilo actual mantiene un
cerrojo en el Objeto dado. Los cerrojos serán
discutidos en la sección de la palabra clave
synchronized.
public static Thread currentThread().
Retorna una referencia del hilo que esta
corriendo actualmente, lo cual es útil cuando
corremos una aplicación de multihilos paso a
paso.
Methods of the Thread Class
public static void dumpStack(). Imprime la
pila de trazos del hilo que actualmente esta
corriendo, lo cual es útil para ejecutar paso a
paso una aplicación multihilos.
El siguiente programa ThreadClassDemo
demuestra el uso de algunos de los métodos de
la clase Thread . Esta utiliza las clases
DisplayMessage y GuessANumber.
public class ThreadClassDemo
{
public static void main(String [] args)
{
Runnable hello = new DisplayMessage("Hello");
Thread thread1 = new Thread(hello);
thread1.setDaemon(true);
thread1.setName("hello");
System.out.println("Starting hello thread...");
thread1.start();
Runnable bye = new DisplayMessage("Goodbye");
Thread thread2 = new Thread(bye);
thread2.setPriority(Thread.MIN_PRIORITY);
thread2.setDaemon(true);
System.out.println("Starting goodbye thread...");
thread2.start();
System.out.println("Starting thread3...");
Thread thread3 = new GuessANumber(27);
thread3.start();
try
{
thread3.join();
}catch(InterruptedException e)
{}
System.out.println("Starting thread4...");
Thread thread4 = new GuessANumber(75);
thread4.start();
System.out.println("main() is ending...");
}
}
Methods of the Thread Class
Hagamos algunos comentarios sobre el
programa ThreadClassDemo
 Existen un total de cinco hilos involucrados.
( No olvide el hilo que el main() esta
ejecutando.
 Los hilos thread1 y thread2 son hilos
demonios, así que ellos no mantienen el
proceso vivo, lo cual es relevante en este
ejemplo por que el thread1 y el thread2
contienen un bucle infinito.
Methods of the Thread Class
 Al thread2 se la ha asignado prioridad
mínima.
 El método main() invoca join() en el hilo
thread3, así ellos no mantienen el proceso
vivo, lo cual ocurre en un tiempo indefinido
debido a que el thread3 corre hasta que
adivina el numero 27.
Methods of the Thread Class
 Mientras el main() esta esperando por el
thread3, existen tres hilos runnable: thread1,
thread2, y thread3.
 Cuando el thread3 termina, el método main()
se convierte en runnable nuevamente e inicia
el thread4. El main() termina y su hilo muere,
dejando que thread1, thread2 y thread4
tengan el resto del tiempo de ejecución del
proceso.
Methods of the Thread Class
 El thread4 corre hasta que este adivina el
número 75, en este momento solo quedan
dos hilos demonios. Esto causa que el
proceso termine.

Más contenido relacionado

PPTX
Chap 15fpin
PPTX
Chap 15apin
PPTX
Chap 15epin
PPTX
Chap 15cpin
PPTX
Chap 15dpin
PPTX
Chap 15gpin
PPTX
2o departamental Programacion 3
Chap 15fpin
Chap 15apin
Chap 15epin
Chap 15cpin
Chap 15dpin
Chap 15gpin
2o departamental Programacion 3

La actualidad más candente (18)

PDF
Tema 12 hilos en java por gio
DOCX
Multitarea e hilos en java con ejemplos
PPT
Programando en java
PPTX
Hilos – threads en java
PPT
Threads en Java
PDF
Clase9 threads
PDF
Java Threads (Hilos en Java)
DOC
Guia1 programacion de-procesos_concurrentes-hilos
PDF
Uso de Excepciones en JAVA
PPTX
Uso de hilos
PDF
Programacion concurrente
PPTX
Programación multitarea
ODP
PCJ Sesión 9: Threads
PDF
SCJP, Clase 9: Threads
PDF
Thread group demonios- parte1
PDF
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
PPTX
Multitarea e hilos en java
Tema 12 hilos en java por gio
Multitarea e hilos en java con ejemplos
Programando en java
Hilos – threads en java
Threads en Java
Clase9 threads
Java Threads (Hilos en Java)
Guia1 programacion de-procesos_concurrentes-hilos
Uso de Excepciones en JAVA
Uso de hilos
Programacion concurrente
Programación multitarea
PCJ Sesión 9: Threads
SCJP, Clase 9: Threads
Thread group demonios- parte1
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
Multitarea e hilos en java
Publicidad

Similar a Chap 15bpin (20)

PPT
Hilos
PPT
Threads en java
PDF
Threads.pdf
PDF
DefinicionExplicacionEjemplosdeHilosenJava
PPTX
Herencia encapsulación polimorfismo
PPTX
Constructores & excepciones
PPTX
Encapsulamiento
PDF
Threads
PPT
6 Upv Solo Pruebas 2009
DOCX
Metodo constructor de una clase JAVA
PPTX
Expo métodos
DOCX
Entrega de reporte no 1, lab 1
PPTX
Apache Storm: Desarrollo
PDF
Reporte unidad4
PDF
8.Clases y objetos Java
PPTX
Metodos 2
PPTX
Hilos en Phytom.pptx
PPTX
2 Introducción al lenguaje Ruby
PPT
Hilos
Threads en java
Threads.pdf
DefinicionExplicacionEjemplosdeHilosenJava
Herencia encapsulación polimorfismo
Constructores & excepciones
Encapsulamiento
Threads
6 Upv Solo Pruebas 2009
Metodo constructor de una clase JAVA
Expo métodos
Entrega de reporte no 1, lab 1
Apache Storm: Desarrollo
Reporte unidad4
8.Clases y objetos Java
Metodos 2
Hilos en Phytom.pptx
2 Introducción al lenguaje Ruby
Publicidad

Último (20)

DOCX
PLANES DE área ciencias naturales y aplicadas
PDF
ciencias-1.pdf libro cuarto basico niños
DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
PDF
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
Metodologías Activas con herramientas IAG
PDF
Escuelas Desarmando una mirada subjetiva a la educación
DOCX
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
PDF
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
TOMO II - LITERATURA.pd plusenmas ultras
DOCX
V UNIDAD - PRIMER GRADO. del mes de agosto
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
PDF
Teologia-Sistematica-Por-Lewis-Sperry-Chafer_060044.pdf
DOCX
PLAN DE CASTELLANO 2021 actualizado a la normativa
PDF
CIRSOC-201-2024_Proyecto de Reglamento Argentino de Estructuras de Hormigón
PDF
DI, TEA, TDAH.pdf guía se secuencias didacticas
PDF
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PLANES DE área ciencias naturales y aplicadas
ciencias-1.pdf libro cuarto basico niños
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
5°-UNIDAD 5 - 2025.pdf aprendizaje 5tooo
caso clínico iam clinica y semiología l3.pptx
Metodologías Activas con herramientas IAG
Escuelas Desarmando una mirada subjetiva a la educación
PLAN DE AREA DE CIENCIAS SOCIALES TODOS LOS GRUPOS
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
TOMO II - LITERATURA.pd plusenmas ultras
V UNIDAD - PRIMER GRADO. del mes de agosto
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
Teologia-Sistematica-Por-Lewis-Sperry-Chafer_060044.pdf
PLAN DE CASTELLANO 2021 actualizado a la normativa
CIRSOC-201-2024_Proyecto de Reglamento Argentino de Estructuras de Hormigón
DI, TEA, TDAH.pdf guía se secuencias didacticas
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx

Chap 15bpin

  • 1. Extending the Thread Class Se puede crear un hilo escribiendo una clase que extienda a la clase java.lang.Thread y sobre escriba al método run() en Thread. La clase GuessANumber extiende a Thread y escoge un número aleatoria mente entre 1 y 100 hasta que adivine el entero almacenado en el campo number.
  • 2. public class GuessANumber extends Thread { private int number; public GuessANumber(int number) { this.number = number; } public void run() { int counter = 0; int guess = 0; do { guess = (int) (Math.random() * 100 + 1); System.out.println(this.getName() + " guesses " + guess); counter++; }while(guess != number); System.out.println("** Correct! " + this.getName() + " in " + counter + "guesses.**"); } }
  • 3. Extending the Thread Class Cuando UD. extiende la clase Thread, UD. se ahorra un paso cuando crea e inicia un hilo por que un objeto Runnable y un objeto Thread son objetos iguales. ( La clase Thread implementa la interface Runnable, así cualquier clase hija de Thread es también de tipo Runnable.)
  • 4. Extending the Thread Class El siguiente programa ThreadDemo instancia dos objetos GuessANumber, luego los inicia a ambos. Cada hilo corre hasta que se adivine el número 20, el cual toma un número arbitrario de guesses.
  • 5. public class ThreadDemo { public static void main(String [] args) { System.out.println("Pick a number between 1 and 100..."); GuessANumber player1 = new GuessANumber(20); GuessANumber player2 = new GuessANumber(20); player1.start(); player2.start(); } }
  • 6. Yielding Threads Un hilo se mantiene invocando el método yield() de la clase Thread , este se ve así: public static void yield() Este método causa que el hilo que corre actualmente se detenga para que los otros hilos tengan oportunidad de ejecutarse.
  • 7. Yielding Threads La siguiente clase GuessANumber2 modifica a la clase GuessANumber al agregar a yield() dentro del método run():
  • 8. public class GuessANumber2 extends Thread{ private int number; public GuessANumber2(int number){ this.number = number; } public void run(){ int counter = 0; int guess = 0; do{ Thread.yield(); guess = (int) (Math.random() * 100 + 1); System.out.println(this.getName() + " guesses " + guess); counter++; }while(guess != number); System.out.println("** Correct! " + this.getName() + " in " + counter + " guesses.**"); } }
  • 9. Yielding Threads Estudie el siguiente programa YieldDemo y trate de determinar que sucede cuando los tres hilos se inician.
  • 10. public class YieldDemo { public static void main(String [] args) { System.out.println("Pick a number between 1 and 100..."); Thread player1 = new GuessANumber2(85); Thread player2 = new GuessANumber2(85); Thread player3 = new GuessANumber2(85); player3.setPriority(Thread.MAX_PRIORITY); player1.start(); player2.start(); player3.start(); } }
  • 11. Yielding Threads Note que en el programa YieldDemo el player3 tiene la prioridad máxima de un Thread, la cual es de 10. Después de cada guess, cada hilo invoca al método yield(). Sin embargo, el player3 tiene una prioridad alta, este no se mantiene para permitir que los hilos placer1 o player2 entren al CPU.
  • 12. Yielding Threads El hilo player3 atrapa el CPU hasta que termina su ejecución. Cuando el hilo del player3 termina, los hilos player1 y player2 cortésmente toman su turno para obtener su guessing number cada uno llama al método yield() después de cada guess.
  • 13. Yielding Threads Si UD. desea que el hilo del player3 tenga una prioridad más baja, para utilizar el CPU, el player3 se puede poner a dormir por poco tiempo. Use el método sleep() de la clase Thread para causar que el hilo que actualmente esta corriendo duerma: public static void sleep( int millisec ) throws InterruptedException
  • 14. Yielding Threads Veamos cual es el efecto que sleep() tiene en la clase GuessANumber2, al acambiar el llamado a Thread.yield() por lo siguiente: try { Thread.sleep(1); }match(InterruptedException e) {}
  • 15. Methods of the Thread Class Veamos en detalles los métodos de la clase Thread. La clase Thread tiene muchos métodos útiles para determinar y cambiar la información acerca de un hilo, incluyendo:
  • 16. Methods of the Thread Class public void start(). Inicia un hilo en un sendero de ejecución, luego invoca al método run() en este objeto Thread. public void run(). Si este objeto Thread fue instanciado usando un destino Runnable por separado, el método run() es invocado en este objeto Runnable. Si UD. Escribe una clase que extiende a Thread, el método sobre escrito run() en la clase hija es invocado.
  • 17. Methods of the Thread Class public final void setName(String name). Cambia el nombre del objeto Thread. También existe el método getName() para obtener el nombre. public final void setDaemon( boolean on ). Un parámetro true denota a este Thread como un hilo demonio. Para el hilo que es un demonio, este método debe ser invocado antes de que el hilo inicie.
  • 18. Methods of the Thread Class public final void setPriority ( int priority ). Asigna la prioridad de este objeto Thread. Los posibles valores están entre 1 y 10. Sin embargo los desarrolladores se animan a usar los siguientes tres valores: Thread.NORM_PRIORITY, Thread.MIN_PRIORITY y Thread.MAX_PRIORITY ( cuyos valores son 5, 1 y 10 respectivamente).
  • 19. Methods of the Thread Class public final void join(long millisec ). El hilo actual invoca este método en un Segundo hilo, causando que el hilo actual se bloquee hasta que el Segundo hilo termine o espere el número de milisegundos pasados. public final boolean isAlive(). Retorna true si el hilo esta vivo, lo cual es en cualquier momento después de que es iniciado pero antes de que este termine de correr
  • 20. Methods of the Thread Class Los métodos previos son invocados en un objeto Thread particular. Los siguientes métodos en la clase Thread son static. Al invocar uno de los métodos static se realizan operaciones en el hilo que corre actualmente:
  • 21. Methods of the Thread Class public static void yield(). Causa que el actual hilo que esta corriendo ceda ante cualquiera de los otros hilos con la misma prioridad que estén esperando para que se ponga en orden de marcha. public static void sleep( long millesec ). Causa que el actual hilo se bloquee por lo menos el número de milisegundos especificados.
  • 22. Methods of the Thread Class public static boolean holdsLock( Object x). Retorna true si el hilo actual mantiene un cerrojo en el Objeto dado. Los cerrojos serán discutidos en la sección de la palabra clave synchronized. public static Thread currentThread(). Retorna una referencia del hilo que esta corriendo actualmente, lo cual es útil cuando corremos una aplicación de multihilos paso a paso.
  • 23. Methods of the Thread Class public static void dumpStack(). Imprime la pila de trazos del hilo que actualmente esta corriendo, lo cual es útil para ejecutar paso a paso una aplicación multihilos. El siguiente programa ThreadClassDemo demuestra el uso de algunos de los métodos de la clase Thread . Esta utiliza las clases DisplayMessage y GuessANumber.
  • 24. public class ThreadClassDemo { public static void main(String [] args) { Runnable hello = new DisplayMessage("Hello"); Thread thread1 = new Thread(hello); thread1.setDaemon(true); thread1.setName("hello"); System.out.println("Starting hello thread..."); thread1.start();
  • 25. Runnable bye = new DisplayMessage("Goodbye"); Thread thread2 = new Thread(bye); thread2.setPriority(Thread.MIN_PRIORITY); thread2.setDaemon(true); System.out.println("Starting goodbye thread..."); thread2.start(); System.out.println("Starting thread3..."); Thread thread3 = new GuessANumber(27); thread3.start();
  • 26. try { thread3.join(); }catch(InterruptedException e) {} System.out.println("Starting thread4..."); Thread thread4 = new GuessANumber(75); thread4.start(); System.out.println("main() is ending..."); } }
  • 27. Methods of the Thread Class Hagamos algunos comentarios sobre el programa ThreadClassDemo  Existen un total de cinco hilos involucrados. ( No olvide el hilo que el main() esta ejecutando.  Los hilos thread1 y thread2 son hilos demonios, así que ellos no mantienen el proceso vivo, lo cual es relevante en este ejemplo por que el thread1 y el thread2 contienen un bucle infinito.
  • 28. Methods of the Thread Class  Al thread2 se la ha asignado prioridad mínima.  El método main() invoca join() en el hilo thread3, así ellos no mantienen el proceso vivo, lo cual ocurre en un tiempo indefinido debido a que el thread3 corre hasta que adivina el numero 27.
  • 29. Methods of the Thread Class  Mientras el main() esta esperando por el thread3, existen tres hilos runnable: thread1, thread2, y thread3.  Cuando el thread3 termina, el método main() se convierte en runnable nuevamente e inicia el thread4. El main() termina y su hilo muere, dejando que thread1, thread2 y thread4 tengan el resto del tiempo de ejecución del proceso.
  • 30. Methods of the Thread Class  El thread4 corre hasta que este adivina el número 75, en este momento solo quedan dos hilos demonios. Esto causa que el proceso termine.