0% encontró este documento útil (0 votos)
121 vistas27 páginas

Programacion Concurrente

El documento habla sobre programación concurrente con hilos en Java. Explica que los hilos permiten dividir tareas y ejecutar código de forma independiente. También describe cómo crear hilos extendiendo la clase Thread o implementando Runnable, y los diferentes estados que pueden tener los hilos.

Cargado por

ruben
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
121 vistas27 páginas

Programacion Concurrente

El documento habla sobre programación concurrente con hilos en Java. Explica que los hilos permiten dividir tareas y ejecutar código de forma independiente. También describe cómo crear hilos extendiendo la clase Thread o implementando Runnable, y los diferentes estados que pueden tener los hilos.

Cargado por

ruben
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Unidad 3.

Programación Concurrente
MultiHilos
(Threads)

©Mtra. Elda Reyes Varela


Introducción
• Los threads o hilos de ejecución son segmentos de código de un
programa que se ejecutan secuencialmente de modo independiente
de otras partes del programa.
• Un proceso puede estar constituido por uno o más threads.
• Un thread esta compuesto por :
• Una CPU virtual
• El código que ejecuta el procesador (métodos)
• Los datos sobre los que trabaja el código (atributos)

©Mtra. Elda Reyes Varela


• Dos threads comparten código si pertenecen a la misma clase.
• Los datos pueden ser o no compartidos por diferentes threads. Eso
ocurre cuando tienen acceso a un objeto común.

©Mtra. Elda Reyes Varela


¿Para qué usar hilos?
• Los threads se utilizan para aislar y coordinar tareas.
• Sin el uso de threads hay aplicaciones que son casi imposibles de
programar:
• Las que tienen tiempos de espera importantes entre etapas.
• Las que consumen muchos recursos de CPU e impiden que el procesador
atienda simultáneamente otros eventos o peticiones del usuario

©Mtra. Elda Reyes Varela


Tipos de threads que pueden aparecer en una
aplicación:

• Threads independientes, que realizan tareas no relacionadas. Éste es


el caso más sencillo y no requiere ninguna programación especial.

• Threads que trabajan en una misma tarea, pero sin interferir ni


intercambiar relación entre ellos. Por ejemplo, threads que
colaboran en el producto de dos matrices ocupándose cada una de
ellas de calcular ciertas filas de la matriz producto.

©Mtra. Elda Reyes Varela


Tipos de threads que pueden aparecer en una
aplicación: (cont.)
• Threads que utilizan recursos de modo mutuamente exclusivo,
aunque sin tener que coordinar sus actividades. Por ejemplo, threads
que actualizan o leen registros de una base de datos y que no pueden
actuar simultáneamente.

• Threads que deben de coordinar sus actividades, de modo que una


de ellas no puede empezar o continuar hasta que la otra haya
realizado su tarea. Los ejemplos más típicos son los de tipo
productor-consumidor, en el que este último tiene que esperar a que
el productor le haya preparado los datos y le avise de esa
circunstancia para realizar su función.

©Mtra. Elda Reyes Varela


Creación de hilos en Java
Hay dos modos de conseguir threads en Java:
• Una es extender la clase Thread,
• la otra es implementando la interface Runnable.
Prácticas:

1. Creación de hilos con Thread y Runnable


2. ThreadGroup
3. Prioridad

©Mtra. Elda Reyes Varela


Thread vs. Runnable
//Clase HiloThread //Clase HiloRunnable
public class HiloThread extends Thread public class HiloRunnable implements Runnable
{ {
public void run() public void run()
{ {
while(true) while(true)
{ {
System.out.println("Hola System.out.println("Hola mundo,
mundo, soy el hilo soy el hilo HiloRunnable");
HiloThread"); }
} }
} }
}

©Mtra. Elda Reyes Varela


¿Como los pongo en marcha y como interactúo
con ellos? Se define una nueva clase:
//Clase Test
public class Test
{
public static void main(String[] args)
{
//Creamos un hilo del primer tipo y lo ponemos en marcha
HiloThread ht = new HiloThread();
//Creamos un hilo del segundo tipo y lo ponemos en marcha
Thread hr = new Thread(new HiloRunnable());
ht.start();
hr.start();

}
}

©Mtra. Elda Reyes Varela


Ejercicio 1:
1. Crear las clases HiloThread, HiloRunnable y la aplicación Test.
2. Compilarlas y correr la aplicación.
3. Observe la salida que produce la ejecución de los hilos.
4. Compare la salida con la de otros compañeros.
5. Reflexione: ¿por qué son diferentes?. Anote sus conclusiones.
6. Investigue y responda: ¿por qué hay dos maneras de crear hilos,
cuál es la diferencia entre ambas formas? (Thread vs. Runnable)

©Mtra. Elda Reyes Varela


Ejercicio 2:
1. Escriba un nuevo programa que cree 3 hilos.
• El primer hilo debe imprimir la serie de números del 1 al 10.
• El segundo hilo debe imprimir la serie de números del 100 al 1,000.
• El tercer hilo debe imprimir los números del 10,000 al 100,000.
• Crear las clases de tipo hilo necesarias.
2. Compilarlas y correr la aplicación.
3. Observe la salida que produce la ejecución de los hilos.
4. Compare la salida con la de otros compañeros.
5. Reflexione: ¿por qué son diferentes?. Anote sus conclusiones.

©Mtra. Elda Reyes Varela


©Mtra. Elda Reyes Varela
Explorando la clase Thread
❑paquete al que pertenece
❑Superclase
❑Clases anidadas
❑ Atributos ¿cuáles tiene?
❑ Constructores ¿cuáles tiene?
❑ Métodos ¿cuáles tiene? ¿cuántos son?

https://docs.oracle.com/javase/8/docs/api/

©Mtra. Elda Reyes Varela


https://docs.oracle.com/javase/8/docs/api/

©Mtra. Elda Reyes Varela


Explorando la interface Runnable
❑paquete al que pertenece
❑Superclase
❑Atributos ¿cuáles tiene?
❑Métodos ¿cuáles tiene? ¿cuántos son?

https://docs.oracle.com/javase/8/docs/api/

©Mtra. Elda Reyes Varela


https://docs.oracle.com/javase/8/docs/api/
Clase Thread vs. Interface Runnable
Responda:
1. ¿Qué implicaciones tiene para una clase extender a Thread?

2. ¿Qué implicaciones tiene para una clase implementar a Runnable?

3. ¿Para qué existen éstas dos maneras de crear hilos?

©Mtra. Elda Reyes Varela


Estados de un hilo
Thread.State
Diagrama de estado del ciclo de vida
de un hilo.

©Mtra. Elda Reyes Varela


PRIORIDAD de un Hilo
1. Investigar y anotar la definición de PRIORIDAD de los hilos.
2. ¿Cuáles son los valores permitidos para definir la prioridad de un
hilo?
3. Investigue cuál es la prioridad por default con que nace un hilo.
4. Investigar cómo se puede modificar la PRIORIDAD de un Hilo.
5. Investigar cuáles factores influyen en el orden de ejecución de los
hilos.
https://docs.oracle.com/javase/8/docs/api/constant-values.html#java.lang.Thread

©Mtra. Elda Reyes Varela


Ejercicio 3: Modificar la prioridad de los hilos.
1. Escriba un nuevo programa que cree 3 hilos.
• El primer hilo debe tener máxima prioridad y debe imprimir los números negativos
desde -1 hasta -1000.
• El segundo hilo debe tener prioridad normal y debe imprimir los números positivos
desde -5,000 a -6,000.
• El tercer hilo debe debe tener la prioridad mímima y debe imprimir los números del
-10,000 a -11,000.
• Crear las clases de tipo hilo necesarias.
2. Compilarlas y correr la aplicación.
3. Observe la salida que produce la ejecución de los hilos.
4. Compare la salida con la de otros compañeros.
5. Reflexione: ¿por qué son diferentes?. Anote sus conclusiones.
©Mtra. Elda Reyes Varela
Grupo de Hilos (ThreadGroup)
• Todo hilo que se este ejecutando en una JVM pertenece a un
ThreadGroup.
• Si no se señala ninguno, el thread pertenecerá al grupo de hilos
principal o grupo "main".
• La división de hilos en grupos permite una gestión y un tratamiento
homogéneo a todos los hilos del grupo como si se tratara de uno solo.
• pudiendo cambiar su prioridad, detenerlos, interrumpirlos,
enumerarlos, obtener información de su estado, etc., con tan solo
una orden.

©Mtra. Elda Reyes Varela


ThreadGroup

©Mtra. Elda Reyes Varela


Ejemplo: La forma de crear hilos que pertenezcan
a un mismo grupo es la siguiente:

ThreadGroup miGrupo = new ThreadGroup("MiGrupo");


Thread h1 = new Thread(miGrupo,new HiloRunnable());
Thread h2 = new Thread(miGrupo,new HiloRunnable());
Thread h3 = new Thread(miGrupo,new HiloRunnable());
miGrupo.list(); //muestra información de todos los hilos del grupo

©Mtra. Elda Reyes Varela


Ejercicio 4. Hacer dos grupos de hilos.
• El primer grupo son los hilos del ejercicio 2.
• El segundo grupo de hilos son los del ejercicio 3.
• Aumente la prioridad del segundo grupo y pruebe el
comportamiento.

©Mtra. Elda Reyes Varela


©Mtra. Elda Reyes Varela

También podría gustarte