SlideShare una empresa de Scribd logo
1 de 45
Module 15 - Threads
Objectives
Upon completion of this module, you
should be able to:
 Define a Thread
 Create a separate threads in a Java
Technology program. Controling the code and
data that are used by that thread
 Control the execution of a thread and write
platform-independent code with threads
Module 15 - Threads
 Describe the difficulties that migth arise when
multiple threads share data
 Use wait and notify to communicate between
threads
 Use synchronized to protect data from
corruption
This module covers multithreading, which
allows a program to perform multiple tasks at
the same time.
Relevance
Discussion - The following question is
relevant to the material presented in this
module:
 How do you get programs to perform multiple
tasks concurrently?
Module 15 - Threads
Los Hilos permiten la ejecución de
múltiples tareas al mismo tiempo.
En este módulo discutiremos como crear
Hilos en Java y como se comportan
después de que se inician.
Modulo 15 - Threads
La creación de los Hilos tiene ventajas; pero el
uso de múltiples hilos debe garantizar la
integridad del uso de los datos; por lo que
necesitamos discutir varios usos de la
sincronización que se suscitan.
Los tópicos que se discuten incluyen la
interface Runnable; las clases Thread, Timer
y TimerTask; la palabra clave syncronized y
como evitar el interbloqueo.
Overview of Threads
Un hilo es definido como un sendero de
ejecución, de una colección de sentencias
que se ejecutan en un orden específico.
Los programas que hemos escrito hasta
ahora en este curso tienen un sendero
simple de ejecución: el método main().
Overview of Threads
Cuando una aplicación de Java es
ejecutada, el método main() corre en su
propio hilo.
Dentro del sendero de ejecución del
main(), UD. puede iniciar nuevos hilos
para realizar nuevas tareas diferentes.
Overview of Threads
Desde el punto de vista de la
programación, el crear múltiples hilos es
equivalente a poder invocar múltiples
métodos al mismo tiempo.
Overview of Threads
UD. puede tener un hilo para desplegar
una GUI en la pantalla, un segundo hilo en
trasfondo que descargue un archivo desde
Internet y un tercer hilo que este
esperando que el usuario interactúe con el
GUI.
Overview of Threads
Un proceso consiste en un espacio de memoria
dispuesto por el sistema operativo que contiene
uno o más hilos.
Un hilo no puede existir por si mismo; este debe
ser parte de un proceso.
Un proceso se mantiene corriendo hasta que
todos los hilos que no son demonios terminan
su ejecución.
Overview of Threads
UD. esta familiarizado con procesos, por
que cada vez que corre un programa en
su computadora, se inicia un proceso.
Hoy los Sistemas Operativos son
Multiprocesos (frecuentemente llamados
multitareas).
Overview of Threads
Los SO de hoy día pueden correr múltiples
procesos al mismo tiempo. Por ejemplo UD.
puede jugar Solitario mientras que verifica su
correo electrónico con el Outlook y navega en
Internet con el Navegador Netscape.
En este capítulo no veremos los procesos
múltiples. Lo que discutiremos es múltiples hilos
en un proceso sencillo.
Overview of Threads
Un hilo demonio, por definición es un hilo
que no mantiene un proceso ejecutándose.
Use un hilo demonio para una tarea que UD.
desea ejecutar en trasfondo mientras el
programa se mantiene corriendo.
Overview of Threads
El proceso del colector de basura de la
JVM es un buen ejemplo de un hilo
demonio el cual siempre esta corriendo en
trasfondo, liberando la memoria de objetos
no usados. Sin embargo, si el colector de
basura es el único hilo corriendo, no existe
necesidad de que el proceso de la JVM de
continúe ejecutándose.
Life Cycle of a Thread
Un hilo recorre varios estados en su ciclo
de vida. Por ejemplo un hilo nace, inicia
corre y luego muere.
Discutiremos varios estados en la vida de
un hilo.
Life Cycle of a Thread
Born (nace). Cuando un hilo es creado se dice
que el hilo ha nacido. Cada hilo tiene una
prioridad, con un nuevo hilo se hereda la
prioridad del hilo que lo ha creado. Esta
prioridad puede ser cambiada en cualquier
momento en el ciclo de vida del hilo. La
prioridad de un hilo es un valor entero y un hilo
en java puede tener un valor de prioridad entre
1 y 10. Un hilo que ha nacido no corre hasta que
este se inicia.
Life Cycle of a Thread
Runnable. Después que un nuevo hilo ha
nacido este se convierte en runnable.
Life Cycle of a Thread
Para cada una de las 10 prioridades,
existe una cola correspondiente de
prioridad ( El primer hilo que entra es el
primero que sale).
Cuando un hilo se convierte en runnable
este entra a la cola con su respectiva
prioridad.
Life Cycle of a Thread
Por ejemplo, un hilo main() tiene una
prioridad de cinco. Si el main() inicia un
hilo Y, entonces Y entra a la cola con
prioridad cinco. Si Y inicia un hilo Z y le
asigna prioridad de 8, Z entrará a la cola
con prioridad ocho. Si Z es un hilo de alta
prioridad este hace valer los derechos de
prioridad sobre el hilo actual y corre
inmediatamente.
Life Cycle of a Thread
Running. El planificador de itinerario de un hilo
determina cuando un hilo tiene el permiso de
correr actualmente. De hecho la única forma en
que un hilo este corriendo es que el planificador
del itinerario del hilo le dio el permiso.
Si por cualquier razón un hilo tiene que dejar el
CPU, esto puede eventualmente ocurrir a través
de la prioridad de runnable de la cola antes de
que este vuelva a correr de nuevo.
Life Cycle of a Thread
Blocked. Un hilo puede ser bloqueado, lo
cual ocurre cuando múltiples hilos están
sincronizados en los mismos datos y
necesitan tomar turnos. Un hilo bloqueado
no corre, tampoco es runnable. Este
espera hasta que la sincronización del
monitor le permita a este continuar, en
este punto se convierte en runnable
nuevamente y entra con la prioridad
apropiada a la cola.
Life Cycle of a Thread
Other blocked status. Un hilo puede ser
bloqueado por otras razones además de la
sincronización.
Por ejemplo, un hilo puede invocar un método
wait() sobre un objeto, el cual bloquea el hilo
hasta que el método notify() sea invocado en el
mismo objeto.
Life Cycle of a Thread
Un hilo puede dormir durante cierto número de
milisegundos o un hilo puede llamar al método
join() y esperar que otro hilo finalice.
Cuando un hilo se deja de estar bloqueado este
nuevamente se convierte en runnable; este se
coloca en la respectiva cola de prioridad y corre
nuevamente cuando el planificador de itinerario
del hilo lo pone en ejecución.
Life Cycle of a Thread
Dead. Un hilo corre hasta completar su
ejecución, este es referido como un hilo
muerto. El término muerto es usado
debido a que este no puede iniciar
nuevamente. Si UD. necesita repetir esta
tarea del hilo, UD. tiene que instanciar un
nuevo objeto hilo.
The Lifecycle of a Thread
new Thread
(born)
CPU
Blocked
blocked until
lock is
available
blocked
until
notified
runs to
completion
(dead)
Runnable
priority queues
start()
Thread
scheduler
synchronized
wait()
notify()
sleep(), join()
Creating a Thread
Existen tres formas comunes para escribir un
hilo en Java:
 Se puede escribir una clase que implemente la
interface Runnable, luego asocia una instancia de su
clase con un objeto java.lang.Thread.
 Se puede escribir una clase que extienda a la clase
Thread.
 Se puede escribir una clase que extiende a la clase
java.util.TimerTask, y luego planificar el itinenario de
la instancia de su clase con el objeto java.util.Timer.
Creating a Thread
Las clases Thread y TimeTask implementan a
Runnable. En ambos casos UD. define UD.
define un método en Runnable:
public void run()
El cuerpo del método run() es el sendero de
ejecución para su hilo. Cuando un hilo inicia su
corrida, el método run() es invocado y el hilo
muere cuando el método run completa su
ejecución.
Implementing Runnable
Iniciaremos creando un hilo que usa la
implementación de la interface Runnable.
La siguiente clase DisplayMessage
implementa a Runnable y usa un bucle
while para desplegar un saludo:
public class DisplayMessage implements Runnable
{
private String message;
public DisplayMessage(String message)
{
this.message = message;
}
public void run()
{
while(true)
{
System.out.println(message);
}
}
}
Implementing Runnable
Los objetos de tipo DisplayMessage son
también de tipo Runnable por que la clase
DisplayMessage implementa a la interface
Runnable.
Sin embargo los objetos DisplayMessage no
son hilos. Por ejemplo, las tres siguientes
sentencias son validas; pero tenga cuidado de
cual es su resultado:
DisplayMessage r;
r = new DisplayMessage (“ Hello, World”);
r.run();
Implementing Runnable
El método es invocado; pero no en un
nuevo hilo. El bucle infinito while
desplegará “Hello World” en el hilo actual,
en que estas tres sentencias aparezcan.
Para correr DisplayMessage en un hilo
UD. necesita instanciar e iniciar un nuevo
objeto de tipo java.lang.Thread.
Implementing Runnable
El propósito de la interface Runnable es separar
el objeto Thread de la tarea que este realiza.
Cuando se escribe una clase que implementa
Runnable, existen dos objetos involucrados en
el Hilo:
 El objeto Runnable que contienen el código que se
ejecuta cuando finalmente el hilo se ejecuta.
 El objeto Thread que nace, tiene una prioridad, inicia,
es planificado, corre, es bloqueado y eventualmente
muere. Cuando el objeto Thread esta corriendo
actualmente, el método run() del objeto Runnable es
el código que se ejecuta.
Implementing Runnable
La clase Thread tiene ocho constructores, los
cuales toman variantes de los siguientes
parámetros:
 String name. Cualquier objeto Thread tiene
un nombre asociado con este. UD. puede
asignarle al Thread cualquier nombre que UD.
desee, el propósito del nombre es permitirle
que distinga los diferentes hilos que UD. crea.
Si UD. no le pone nombre la clase Thread lo
nombra Thread0, Thread1, Thread2, … .
Implementing Runnable
 Runnable target. Asocia un objeto
Runnable como el destino del Thread.
Si UD. escribe separadamente una
clase que implemente a Runnable, use
uno de los constructores que pase el
parámetro Runnable.
Implementing Runnable
 ThreadGroup. El grupo al que
pertenece el hilo. Todos los hilos
pertenecen a un grupo. Si UD. crea su
propia clase ThreadGroup, use uno de
los constructores de Thread que tiene
el parámetro asociado a un nuevo hilo
con su grupo. Si UD. no pone
explícitamente un hilo en un grupo, el
hilo es colocado en el grupo de hilo por
defecto.
Implementing Runnable
long stackSize. El número de bytes que
UD. quiere colocar para la dimensión de la
pila que es usada por el hilo. La
documentación advierte que este valor es
altamente dependiente de la plataforma y
puede ser ignorado en algunas JVM.
Implementing Runnable
Cualquier hilo pertenece a un grupo
thread.
La clase java.lang.ThreadGroup
representa un grupo thread.
Los objetos Thread son asociados con un
grupo usando uno de los constructores
Thread con el parámetro ThreadGroup.
Implementing Runnable
Si un hilo no es específicamente agregado
a un grupo thread, este pertenece al
grupo thread por defecto creado por la
JVM llamado main.
Crear un ThreadGroup es útil cuando se
crea un número grande de hilos.
Implementing Runnable
Después que UD. ha instanciado un
objeto Thread y lo asocia al destino
Runnable, este nuevo hilo es iniciado
invocando el método start() del objeto
Thread.
Implementing Runnable
El siguiente programa RunnableDemo
demuestra como se instancia un objeto
Runnable ( el objeto DisplayMessage) y
un correspondiente objeto Thread.
El método start() es invocado en el objeto
Thread, que causa que el método run()
de DisplayMessage se invoque para
ejecutarse en un hilo separado.
public class RunnableDemo
{
public static void main(String [] args)
{
System.out.println("Creating the hello thread...");
DisplayMessage hello = new DisplayMessage("Hello");
Thread thread1 = new Thread(hello);
System.out.println("Starting the hello thread...");
thread1.start();
System.out.println("Creating the goodbye thread...");
DisplayMessage bye = new DisplayMessage("Goodbye");
Thread thread2 = new Thread(bye);
System.out.println("Starting the goodbye thread...");
thread2.start();
}
}
Implementing Runnable
Hagamos algunos comentarios acerca el
programa RunnableDemo:
 Dos objetos Runnable son instanciados:
hello y bye.
 Cada uno de los dos objetos Runnable es
asociado con un objeto Thread:
thread1 y thread2.
Implementing Runnable
 Al invocar el método start() en los objetos
Thread causa que los hilos sean runnable.
 Cuando el hilo es planificado, el método run()
es invocado en el correspondiente objeto
Runnable.
 Después de que el hilo thread2 es iniciado,
hay tres hilos en este proceso: en el hilo
main(), thread1 y thread2.
Implementing Runnable
 El programa no termina, hasta que el método
main() termina su corrida. Una vez que
main() termina su ejecución, este proceso
aún tiene dos hilos no demonios: thread1 y
thread2. El proceso no termina hasta que
ambos hilos terminan su ejecución.
Implementing Runnable
 Esto nos dice que este proceso nunca
termina porque los dos hilos no paran ( sus
correspondientes métodos run() contiene un
bucle infinito ). Para detener este proceso
que UD. necesita detener los procesos de la
JVM. ( En Windows oprima ctrl.+c en la línea
de comando.)

Más contenido relacionado

La actualidad más candente

Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
Robert Wolf
 
Programando en java
Programando en javaProgramando en java
Programando en java
julianbm60
 
Clase9 threads
Clase9 threadsClase9 threads
Clase9 threads
jorg_marq
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
bowelmx
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
innovalabcun
 
Thread group demonios- parte1
Thread group demonios- parte1Thread group demonios- parte1
Thread group demonios- parte1
Abrahan Reyes
 

La actualidad más candente (18)

Tema 12 hilos en java por gio
Tema 12   hilos en java por gioTema 12   hilos en java por gio
Tema 12 hilos en java por gio
 
Programando en java
Programando en javaProgramando en java
Programando en java
 
Hilos – threads en java
Hilos – threads   en javaHilos – threads   en java
Hilos – threads en java
 
Threads en Java
Threads en JavaThreads en Java
Threads en Java
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
Programacion concurrente
Programacion concurrenteProgramacion concurrente
Programacion concurrente
 
Clase9 threads
Clase9 threadsClase9 threads
Clase9 threads
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
Thread group demonios- parte1
Thread group demonios- parte1Thread group demonios- parte1
Thread group demonios- parte1
 
Threads
ThreadsThreads
Threads
 
Multitarea e hilos en java
Multitarea e hilos en javaMultitarea e hilos en java
Multitarea e hilos en java
 
PCJ Sesión 9: Threads
PCJ Sesión 9: ThreadsPCJ Sesión 9: Threads
PCJ Sesión 9: Threads
 
SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threads
 
Networking
NetworkingNetworking
Networking
 
SCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/OSCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/O
 

Similar a Chap 15apin

Programación concurrente
Programación concurrenteProgramación concurrente
Programación concurrente
carlos Salazar
 
Threads en java
Threads en javaThreads en java
Threads en java
jent46
 
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
Oscar V
 

Similar a Chap 15apin (20)

Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
 
Hilos
HilosHilos
Hilos
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Thread 01
Thread 01Thread 01
Thread 01
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
DIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdfDIAPOSITIVAS UNIDAD3.pdf
DIAPOSITIVAS UNIDAD3.pdf
 
Unidad 4 tópicos avanzados de programación
Unidad 4 tópicos avanzados de programación Unidad 4 tópicos avanzados de programación
Unidad 4 tópicos avanzados de programación
 
Lps 17 hilos
Lps 17 hilosLps 17 hilos
Lps 17 hilos
 
Thread
ThreadThread
Thread
 
Multitarea
MultitareaMultitarea
Multitarea
 
Clase 3 ene 8
Clase 3 ene 8Clase 3 ene 8
Clase 3 ene 8
 
Hilos java
Hilos javaHilos java
Hilos java
 
Atix23
Atix23Atix23
Atix23
 
Atix23
Atix23Atix23
Atix23
 
Programación concurrente
Programación concurrenteProgramación concurrente
Programación concurrente
 
Uso de threads en C#
Uso de threads en C#Uso de threads en C#
Uso de threads en C#
 
Threads en java
Threads en javaThreads en java
Threads en java
 
Hilos
HilosHilos
Hilos
 
hilosJava.pptx
hilosJava.pptxhilosJava.pptx
hilosJava.pptx
 
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
 

Último

TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
NadiaMartnez11
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
RigoTito
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
pvtablets2023
 

Último (20)

TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptxEL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
EL HABITO DEL AHORRO en tu idea emprendedora22-04-24.pptx
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
2 REGLAMENTO RM 0912-2024 DE MODALIDADES DE GRADUACIÓN_.pptx
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
semana 4 9NO Estudios sociales.pptxnnnn
semana 4  9NO Estudios sociales.pptxnnnnsemana 4  9NO Estudios sociales.pptxnnnn
semana 4 9NO Estudios sociales.pptxnnnn
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIASISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
SISTEMA RESPIRATORIO PARA NIÑOS PRIMARIA
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
 

Chap 15apin

  • 1. Module 15 - Threads Objectives Upon completion of this module, you should be able to:  Define a Thread  Create a separate threads in a Java Technology program. Controling the code and data that are used by that thread  Control the execution of a thread and write platform-independent code with threads
  • 2. Module 15 - Threads  Describe the difficulties that migth arise when multiple threads share data  Use wait and notify to communicate between threads  Use synchronized to protect data from corruption This module covers multithreading, which allows a program to perform multiple tasks at the same time.
  • 3. Relevance Discussion - The following question is relevant to the material presented in this module:  How do you get programs to perform multiple tasks concurrently?
  • 4. Module 15 - Threads Los Hilos permiten la ejecución de múltiples tareas al mismo tiempo. En este módulo discutiremos como crear Hilos en Java y como se comportan después de que se inician.
  • 5. Modulo 15 - Threads La creación de los Hilos tiene ventajas; pero el uso de múltiples hilos debe garantizar la integridad del uso de los datos; por lo que necesitamos discutir varios usos de la sincronización que se suscitan. Los tópicos que se discuten incluyen la interface Runnable; las clases Thread, Timer y TimerTask; la palabra clave syncronized y como evitar el interbloqueo.
  • 6. Overview of Threads Un hilo es definido como un sendero de ejecución, de una colección de sentencias que se ejecutan en un orden específico. Los programas que hemos escrito hasta ahora en este curso tienen un sendero simple de ejecución: el método main().
  • 7. Overview of Threads Cuando una aplicación de Java es ejecutada, el método main() corre en su propio hilo. Dentro del sendero de ejecución del main(), UD. puede iniciar nuevos hilos para realizar nuevas tareas diferentes.
  • 8. Overview of Threads Desde el punto de vista de la programación, el crear múltiples hilos es equivalente a poder invocar múltiples métodos al mismo tiempo.
  • 9. Overview of Threads UD. puede tener un hilo para desplegar una GUI en la pantalla, un segundo hilo en trasfondo que descargue un archivo desde Internet y un tercer hilo que este esperando que el usuario interactúe con el GUI.
  • 10. Overview of Threads Un proceso consiste en un espacio de memoria dispuesto por el sistema operativo que contiene uno o más hilos. Un hilo no puede existir por si mismo; este debe ser parte de un proceso. Un proceso se mantiene corriendo hasta que todos los hilos que no son demonios terminan su ejecución.
  • 11. Overview of Threads UD. esta familiarizado con procesos, por que cada vez que corre un programa en su computadora, se inicia un proceso. Hoy los Sistemas Operativos son Multiprocesos (frecuentemente llamados multitareas).
  • 12. Overview of Threads Los SO de hoy día pueden correr múltiples procesos al mismo tiempo. Por ejemplo UD. puede jugar Solitario mientras que verifica su correo electrónico con el Outlook y navega en Internet con el Navegador Netscape. En este capítulo no veremos los procesos múltiples. Lo que discutiremos es múltiples hilos en un proceso sencillo.
  • 13. Overview of Threads Un hilo demonio, por definición es un hilo que no mantiene un proceso ejecutándose. Use un hilo demonio para una tarea que UD. desea ejecutar en trasfondo mientras el programa se mantiene corriendo.
  • 14. Overview of Threads El proceso del colector de basura de la JVM es un buen ejemplo de un hilo demonio el cual siempre esta corriendo en trasfondo, liberando la memoria de objetos no usados. Sin embargo, si el colector de basura es el único hilo corriendo, no existe necesidad de que el proceso de la JVM de continúe ejecutándose.
  • 15. Life Cycle of a Thread Un hilo recorre varios estados en su ciclo de vida. Por ejemplo un hilo nace, inicia corre y luego muere. Discutiremos varios estados en la vida de un hilo.
  • 16. Life Cycle of a Thread Born (nace). Cuando un hilo es creado se dice que el hilo ha nacido. Cada hilo tiene una prioridad, con un nuevo hilo se hereda la prioridad del hilo que lo ha creado. Esta prioridad puede ser cambiada en cualquier momento en el ciclo de vida del hilo. La prioridad de un hilo es un valor entero y un hilo en java puede tener un valor de prioridad entre 1 y 10. Un hilo que ha nacido no corre hasta que este se inicia.
  • 17. Life Cycle of a Thread Runnable. Después que un nuevo hilo ha nacido este se convierte en runnable.
  • 18. Life Cycle of a Thread Para cada una de las 10 prioridades, existe una cola correspondiente de prioridad ( El primer hilo que entra es el primero que sale). Cuando un hilo se convierte en runnable este entra a la cola con su respectiva prioridad.
  • 19. Life Cycle of a Thread Por ejemplo, un hilo main() tiene una prioridad de cinco. Si el main() inicia un hilo Y, entonces Y entra a la cola con prioridad cinco. Si Y inicia un hilo Z y le asigna prioridad de 8, Z entrará a la cola con prioridad ocho. Si Z es un hilo de alta prioridad este hace valer los derechos de prioridad sobre el hilo actual y corre inmediatamente.
  • 20. Life Cycle of a Thread Running. El planificador de itinerario de un hilo determina cuando un hilo tiene el permiso de correr actualmente. De hecho la única forma en que un hilo este corriendo es que el planificador del itinerario del hilo le dio el permiso. Si por cualquier razón un hilo tiene que dejar el CPU, esto puede eventualmente ocurrir a través de la prioridad de runnable de la cola antes de que este vuelva a correr de nuevo.
  • 21. Life Cycle of a Thread Blocked. Un hilo puede ser bloqueado, lo cual ocurre cuando múltiples hilos están sincronizados en los mismos datos y necesitan tomar turnos. Un hilo bloqueado no corre, tampoco es runnable. Este espera hasta que la sincronización del monitor le permita a este continuar, en este punto se convierte en runnable nuevamente y entra con la prioridad apropiada a la cola.
  • 22. Life Cycle of a Thread Other blocked status. Un hilo puede ser bloqueado por otras razones además de la sincronización. Por ejemplo, un hilo puede invocar un método wait() sobre un objeto, el cual bloquea el hilo hasta que el método notify() sea invocado en el mismo objeto.
  • 23. Life Cycle of a Thread Un hilo puede dormir durante cierto número de milisegundos o un hilo puede llamar al método join() y esperar que otro hilo finalice. Cuando un hilo se deja de estar bloqueado este nuevamente se convierte en runnable; este se coloca en la respectiva cola de prioridad y corre nuevamente cuando el planificador de itinerario del hilo lo pone en ejecución.
  • 24. Life Cycle of a Thread Dead. Un hilo corre hasta completar su ejecución, este es referido como un hilo muerto. El término muerto es usado debido a que este no puede iniciar nuevamente. Si UD. necesita repetir esta tarea del hilo, UD. tiene que instanciar un nuevo objeto hilo.
  • 25. The Lifecycle of a Thread new Thread (born) CPU Blocked blocked until lock is available blocked until notified runs to completion (dead) Runnable priority queues start() Thread scheduler synchronized wait() notify() sleep(), join()
  • 26. Creating a Thread Existen tres formas comunes para escribir un hilo en Java:  Se puede escribir una clase que implemente la interface Runnable, luego asocia una instancia de su clase con un objeto java.lang.Thread.  Se puede escribir una clase que extienda a la clase Thread.  Se puede escribir una clase que extiende a la clase java.util.TimerTask, y luego planificar el itinenario de la instancia de su clase con el objeto java.util.Timer.
  • 27. Creating a Thread Las clases Thread y TimeTask implementan a Runnable. En ambos casos UD. define UD. define un método en Runnable: public void run() El cuerpo del método run() es el sendero de ejecución para su hilo. Cuando un hilo inicia su corrida, el método run() es invocado y el hilo muere cuando el método run completa su ejecución.
  • 28. Implementing Runnable Iniciaremos creando un hilo que usa la implementación de la interface Runnable. La siguiente clase DisplayMessage implementa a Runnable y usa un bucle while para desplegar un saludo:
  • 29. public class DisplayMessage implements Runnable { private String message; public DisplayMessage(String message) { this.message = message; } public void run() { while(true) { System.out.println(message); } } }
  • 30. Implementing Runnable Los objetos de tipo DisplayMessage son también de tipo Runnable por que la clase DisplayMessage implementa a la interface Runnable. Sin embargo los objetos DisplayMessage no son hilos. Por ejemplo, las tres siguientes sentencias son validas; pero tenga cuidado de cual es su resultado: DisplayMessage r; r = new DisplayMessage (“ Hello, World”); r.run();
  • 31. Implementing Runnable El método es invocado; pero no en un nuevo hilo. El bucle infinito while desplegará “Hello World” en el hilo actual, en que estas tres sentencias aparezcan. Para correr DisplayMessage en un hilo UD. necesita instanciar e iniciar un nuevo objeto de tipo java.lang.Thread.
  • 32. Implementing Runnable El propósito de la interface Runnable es separar el objeto Thread de la tarea que este realiza. Cuando se escribe una clase que implementa Runnable, existen dos objetos involucrados en el Hilo:  El objeto Runnable que contienen el código que se ejecuta cuando finalmente el hilo se ejecuta.  El objeto Thread que nace, tiene una prioridad, inicia, es planificado, corre, es bloqueado y eventualmente muere. Cuando el objeto Thread esta corriendo actualmente, el método run() del objeto Runnable es el código que se ejecuta.
  • 33. Implementing Runnable La clase Thread tiene ocho constructores, los cuales toman variantes de los siguientes parámetros:  String name. Cualquier objeto Thread tiene un nombre asociado con este. UD. puede asignarle al Thread cualquier nombre que UD. desee, el propósito del nombre es permitirle que distinga los diferentes hilos que UD. crea. Si UD. no le pone nombre la clase Thread lo nombra Thread0, Thread1, Thread2, … .
  • 34. Implementing Runnable  Runnable target. Asocia un objeto Runnable como el destino del Thread. Si UD. escribe separadamente una clase que implemente a Runnable, use uno de los constructores que pase el parámetro Runnable.
  • 35. Implementing Runnable  ThreadGroup. El grupo al que pertenece el hilo. Todos los hilos pertenecen a un grupo. Si UD. crea su propia clase ThreadGroup, use uno de los constructores de Thread que tiene el parámetro asociado a un nuevo hilo con su grupo. Si UD. no pone explícitamente un hilo en un grupo, el hilo es colocado en el grupo de hilo por defecto.
  • 36. Implementing Runnable long stackSize. El número de bytes que UD. quiere colocar para la dimensión de la pila que es usada por el hilo. La documentación advierte que este valor es altamente dependiente de la plataforma y puede ser ignorado en algunas JVM.
  • 37. Implementing Runnable Cualquier hilo pertenece a un grupo thread. La clase java.lang.ThreadGroup representa un grupo thread. Los objetos Thread son asociados con un grupo usando uno de los constructores Thread con el parámetro ThreadGroup.
  • 38. Implementing Runnable Si un hilo no es específicamente agregado a un grupo thread, este pertenece al grupo thread por defecto creado por la JVM llamado main. Crear un ThreadGroup es útil cuando se crea un número grande de hilos.
  • 39. Implementing Runnable Después que UD. ha instanciado un objeto Thread y lo asocia al destino Runnable, este nuevo hilo es iniciado invocando el método start() del objeto Thread.
  • 40. Implementing Runnable El siguiente programa RunnableDemo demuestra como se instancia un objeto Runnable ( el objeto DisplayMessage) y un correspondiente objeto Thread. El método start() es invocado en el objeto Thread, que causa que el método run() de DisplayMessage se invoque para ejecutarse en un hilo separado.
  • 41. public class RunnableDemo { public static void main(String [] args) { System.out.println("Creating the hello thread..."); DisplayMessage hello = new DisplayMessage("Hello"); Thread thread1 = new Thread(hello); System.out.println("Starting the hello thread..."); thread1.start(); System.out.println("Creating the goodbye thread..."); DisplayMessage bye = new DisplayMessage("Goodbye"); Thread thread2 = new Thread(bye); System.out.println("Starting the goodbye thread..."); thread2.start(); } }
  • 42. Implementing Runnable Hagamos algunos comentarios acerca el programa RunnableDemo:  Dos objetos Runnable son instanciados: hello y bye.  Cada uno de los dos objetos Runnable es asociado con un objeto Thread: thread1 y thread2.
  • 43. Implementing Runnable  Al invocar el método start() en los objetos Thread causa que los hilos sean runnable.  Cuando el hilo es planificado, el método run() es invocado en el correspondiente objeto Runnable.  Después de que el hilo thread2 es iniciado, hay tres hilos en este proceso: en el hilo main(), thread1 y thread2.
  • 44. Implementing Runnable  El programa no termina, hasta que el método main() termina su corrida. Una vez que main() termina su ejecución, este proceso aún tiene dos hilos no demonios: thread1 y thread2. El proceso no termina hasta que ambos hilos terminan su ejecución.
  • 45. Implementing Runnable  Esto nos dice que este proceso nunca termina porque los dos hilos no paran ( sus correspondientes métodos run() contiene un bucle infinito ). Para detener este proceso que UD. necesita detener los procesos de la JVM. ( En Windows oprima ctrl.+c en la línea de comando.)