SlideShare una empresa de Scribd logo
Java Advanced Programming
Introduccion II
http://javacuriosities.blogspot.com.ar/
Green Threads VS Native Threads
 Green Threads: Solo pueden cambiar de contexto cuando un Thread
necesita cambiar explícitamente (Thread.yield(), Object.wait(), etc.) o
cuando el Thread esta bloqueado por I/O. No hay mas Green Threads
desde la versión 1.2, todos los thread son Native Thread. Este tipo de
hilos era controlado por la JVM.
 Native Threads: Pueden cambiar de contexto desde un Thread hasta
otro en cualquier momento. Este tipo de Thread son controlado por el
sistema operativo.
Java advanced programming
Prioridades
 Cada thread puede tener una prioridad diferente.
 Cada thread tendrá la misma prioridad que su padre de manera inicial.
 El scheduler elige el hilo con mayor prioridad, si hubiera hilos con igual
prioridad usa la estrategia FIFO(First Input, First Output) para seleccionar
el hilo
 El algoritmo de selección va a depender del SO.
 JDK soporta 10 niveles de prioridad, se aconseja usar los niveles
predefinidos ya que cada SO en realidad tiene su propio rango.
Si intentamos asignar un numero que no este entre 1 y 10 recibiremos
una exception.
- java.lang.Thread.MIN_PRIORITY = 1
- java.lang.Thread.NORM_PRIORITY = 5
- java.lang.Thread.MAX_PRIORITY = 10
Java advanced programming
Metodo setPriority()
Para establecer la prioridad de un thread se utiliza el método setPriority().
 Las prioridades van desde 1 hasta 10.
 Cada thread se crea con la misma prioridad que su padre.
 Si ponemos un valor diferente obtendremos una exception.
 La prioridad tiene que ser asignada antes de llamar al método start() sino
no tendrá efecto.
Java advanced programming
Race Condition
Java advanced programming
Hablamos de Race Condicion (O Condición de carrera) cuando el resultado
de una operación depende del orden de ejecución.
Esto se debe a la falta de sincronización de ciertas operaciones lo cual
conduce a este tipo de resultados, en estos casos hablamos de
indeterminismo.
Un ejemplo sencillo es el incremento de una variable entera desde dos
thread de forma concurrentes, dado que el incremento no es una operación
atómica puede suceder que estos threads se pisen entre si y solo uno realice
el incremento.
Synchronized
Java advanced programming
Cuando se utiliza la palabra clave synchronized se esta indicando una
zona restringida para el uso de Threads, esta zona restringida para efectos
prácticos puede ser considerada un candado (“lock”) sobre la instancia del
objeto en cuestión.
Lo anterior implica que si es invocado un método synchronized únicamente
el Thread que lo invoca tiene acceso a la instancia del objeto, y cualquier
otro Thread que intente acceder a esta misma instancia tendrá que esperar
hasta que sea terminada la ejecución del método synchronized.
Cuando la instancia tiene mas de un método syncronized los llamados
sobre cualquier otro método syncronized deben esperar.
El synchronized puede ser a en diferentes niveles
- Métodos de instancia
- Métodos de clase
- Sobre un objeto
Metodos notify() y notifyAll()
Java advanced programming
 wait(): Le indica al hilo en curso que abandone el monitor y se vaya a
dormir hasta que otro hilo llame a notify() o notifyAll(). El método wait
puede recibir la cantidad de tiempo máxima que debe esperar, si
ejecutamos wait(0) es lo mismo que decir infinito o sea hasta que alguien
llame al notify.
 notify(): Despierta a alguno de los hilo que realizó una llamada a wait
sobre el mismo objeto. No esta garantizado que hilo se despierta.
 notifyAll(): Despierta todos los hilos que realizaron una llamada a wait
sobre el mismo objeto.
Estos tres métodos deben ser llamados dentro de un contexto sincronizado
sino arrojan la exception "java.lang.IllegalMonitorStateException".
Estos métodos pertenecen a la clase Object.
Deadlock
 Es el bloqueo permanente de un conjunto de procesos o hilos de
ejecución en un sistema concurrente que compiten por recursos del
sistema o bien se comunican entre ellos. A diferencia de otros problemas
de concurrencia de procesos, no existe una solución general para los
interbloqueos.
Java advanced programming
Livelock
 Un livelock es una situación en la que dos o más threads se bloquean
entre sí, respondiendo a una acción que es causada por otro hilo. En
contraste con una situación de bloqueo, en la que dos o más threads
esperan en un estado específico, los threads que participan en un livelock
cambian su estado de manera que se impide el progreso en su tarea.
Java advanced programming
Starvation
 Nos referimos a Starvation cuando un thread no es capaz de adquirir
acceso a un recurso para ejecutar progreso en su tarea. Esto sucede
cuando un recurso compartido no esta disponible por periodos largos
debido a que hay otros "greedy" threads.
Java advanced programming
Fair locks
 Un fair lock tiene en cuenta el time waiting de los threads que esperan
sobre un lock cuando tiene que seleccionar el siguiente thread.
Java advanced programming
Thread-Safe
 Una función (o método) Thread-safe puede ser invocada por múltiples
hilos de ejecución sin preocuparnos de que los datos a los que accede
dicha función (o método) sean corrompidos por alguno de los hilos ya que
se asegura la atomicidad de la operación, es decir, la función se ejecuta
de forma serializada sin interrupciones, por lo general, adquiriendo un
mutex (Bloqueo de exclusión mutua).
Java advanced programming
Metodo interrupt()
Java advanced programming
El método interrupt() sirve para interrumpir un thread, si este estuviera en
estado blocked (Ya sea por wait(), join(), sleep() , etc) arrojaría la exception
java.lang.InterruptedException.
Este método es usado cuando queremos detener la ejecución de un
Thread.
Es un método de instancia.
Metodos
Java advanced programming
Clase Object Clase Thread Interfaz Runnable Deprecado Estatico
wait() start() run() NO
notify() join() NO
notifyAll() setPriority() NO
setName() NO
isAlive() NO
isInterrupted() NO
isDaemon() NO
yield() SI
sleep() SI
stop() SI NO
suspend() SI NO
resume() SI NO
User Threads VS Daemon Threads
Java advanced programming
 User Thread: Corresponden a los hilos que se ejecutan en primer plano
notificando el fín de su ejecución al usuario.
 Daemon: Son aquellos hilos que se realizan en background (Segundo
plano), tareas que no forman parte de la esencia de un programa y que
se están ejecutando mientras no se finalice la aplicación.
La JVM va a seguir viva mientras que existan User Threads, el método
main es un User Thread.

Más contenido relacionado

PDF
PDF
Administración de memoria en java
PDF
Java Threads (Hilos en Java)
PPTX
Multitarea e hilos en java
PPT
Threads en Java
PPTX
Hilos – threads en java
PPTX
Uso de hilos
Administración de memoria en java
Java Threads (Hilos en Java)
Multitarea e hilos en java
Threads en Java
Hilos – threads en java
Uso de hilos

La actualidad más candente (19)

PDF
Tema 12 hilos en java por gio
PPTX
2o departamental Programacion 3
PDF
GUIA 1 HILOS Y PROCESOS
PDF
Máquina virtual en java
PPT
Programando en java
PDF
Thread group demonios- parte1
ODP
PCJ Sesión 9: Threads
DOCX
Multitarea e hilos en java con ejemplos
PDF
De Threads a CompletableFutures
PPTX
Chap 15cpin
PPTX
Programación multitarea
PDF
Lps 17 hilos
PDF
Curso de Sistemas Operativos - Unidad Procesos e Hilos
PPTX
Subprocesamiento Mùltiple
PDF
Lenguaje Java
DOCX
COMANDOS DE JAVA
PPTX
S Incronizacion De Procesos
PPTX
Fundamentos de la Refactorización
DOCX
Edhiel y aranza_22
Tema 12 hilos en java por gio
2o departamental Programacion 3
GUIA 1 HILOS Y PROCESOS
Máquina virtual en java
Programando en java
Thread group demonios- parte1
PCJ Sesión 9: Threads
Multitarea e hilos en java con ejemplos
De Threads a CompletableFutures
Chap 15cpin
Programación multitarea
Lps 17 hilos
Curso de Sistemas Operativos - Unidad Procesos e Hilos
Subprocesamiento Mùltiple
Lenguaje Java
COMANDOS DE JAVA
S Incronizacion De Procesos
Fundamentos de la Refactorización
Edhiel y aranza_22
Publicidad

Similar a Thread 02 (20)

PDF
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
PPTX
programacion concurrente java.pptx
PDF
SCJP, Clase 9: Threads
PDF
Clase9 threads
PDF
DefinicionExplicacionEjemplosdeHilosenJava
PPTX
hilosJava.pptx
PPTX
Chap 15fpin
PDF
DIAPOSITIVAS UNIDAD3.pdf
PPTX
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
PDF
Threads.pdf
PDF
PPTX
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
PPT
Threads en java
PPT
Hilos
PPT
Sockets y Threads en Java
PPTX
Chap 15epin
PDF
Programaci un+concurrente+en+java
PPTX
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
PDF
Programacion concurrente
Ocp, jse 6 programmer (1 z0 851) - guia practica 4 de 7(concurrencia) v1
programacion concurrente java.pptx
SCJP, Clase 9: Threads
Clase9 threads
DefinicionExplicacionEjemplosdeHilosenJava
hilosJava.pptx
Chap 15fpin
DIAPOSITIVAS UNIDAD3.pdf
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Threads.pdf
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Threads en java
Hilos
Sockets y Threads en Java
Chap 15epin
Programaci un+concurrente+en+java
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Programacion concurrente
Publicidad

Más de Luis Miguel De Bello (18)

PPSX
Java Web Services - REST
PPSX
Java Web Services - SOAP Temas Adicionales
PPSX
Java Web Services - SOAP Binding
PPTX
Java Web Services - Introduccion
PPTX
Java Web - JSF
PPTX
Java Web - Struts
PPTX
Java Web - JSP
PPTX
Java Web - Servlet
PPTX
Base de datos - Clase 2
PPTX
Base de datos - Clase 3
PPTX
Base de datos - Clase 1
PPTX
Base de datos - Clase 4
PPTX
Java Web - Session
PPTX
Java Web - Introduccion
PDF
PDF
PPT
Best Practices
Java Web Services - REST
Java Web Services - SOAP Temas Adicionales
Java Web Services - SOAP Binding
Java Web Services - Introduccion
Java Web - JSF
Java Web - Struts
Java Web - JSP
Java Web - Servlet
Base de datos - Clase 2
Base de datos - Clase 3
Base de datos - Clase 1
Base de datos - Clase 4
Java Web - Session
Java Web - Introduccion
Best Practices

Último (20)

PDF
GUÍA PARA LA IMPLEMENTACIÓN DEL PLAN PARA LA REDUCCIÓN DEL RIESGO DE DESASTRES
PPTX
Notificacion e investigación de incidentes y accidentes de trabajo.pptx
PPTX
Contexto Normativo NSR10, presentacion 2025
PPTX
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
PDF
manual-electricidad-automotriz-sistemas-electricos-bateria-alumbrado-iluminac...
PPT
Sustancias Peligrosas de empresas para su correcto manejo
PDF
SEC formula cargos al Consejo Directivo del Coordinador y a ocho eléctricas p...
PPT
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
PDF
CALIDAD SSOMA AMBIENTE PRL UNIVERSIDADDD
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
PDF
Informe Estudio Final Apagon del 25 de febrero
DOCX
Cumplimiento normativo y realidad laboral
PDF
Oficio SEC 293416 Comision Investigadora
DOCX
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
PDF
NORMATIVA Y DESCRIPCION ALCANTARILLADO PLUVIAL.pdf
PDF
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
PDF
TESTAMENTO DE DESCRIPTIVA ..............
PPTX
Gestion de seguridad y salud ocupacional.pptx
PDF
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
PDF
MATRIZ IDENTIFICACIÓN EVALUACION CONTROL PRL.pdf
GUÍA PARA LA IMPLEMENTACIÓN DEL PLAN PARA LA REDUCCIÓN DEL RIESGO DE DESASTRES
Notificacion e investigación de incidentes y accidentes de trabajo.pptx
Contexto Normativo NSR10, presentacion 2025
CAPACITACIÓN DE USO ADECUADO DE EPP.pptx
manual-electricidad-automotriz-sistemas-electricos-bateria-alumbrado-iluminac...
Sustancias Peligrosas de empresas para su correcto manejo
SEC formula cargos al Consejo Directivo del Coordinador y a ocho eléctricas p...
tema DISEÑO ORGANIZACIONAL UNIDAD 1 A.ppt
CALIDAD SSOMA AMBIENTE PRL UNIVERSIDADDD
Manual ISO9001_2015_IATF_16949_2016.pptx
Informe Estudio Final Apagon del 25 de febrero
Cumplimiento normativo y realidad laboral
Oficio SEC 293416 Comision Investigadora
CONCEPTOS BASICOS DE LA PROGRAMACION STEP
NORMATIVA Y DESCRIPCION ALCANTARILLADO PLUVIAL.pdf
Informe Comision Investigadora Final distribución electrica años 2024 y 2025
TESTAMENTO DE DESCRIPTIVA ..............
Gestion de seguridad y salud ocupacional.pptx
Sustitucion_del_maiz_por_harina_integral_de_zapall.pdf
MATRIZ IDENTIFICACIÓN EVALUACION CONTROL PRL.pdf

Thread 02

  • 1. Java Advanced Programming Introduccion II http://javacuriosities.blogspot.com.ar/
  • 2. Green Threads VS Native Threads  Green Threads: Solo pueden cambiar de contexto cuando un Thread necesita cambiar explícitamente (Thread.yield(), Object.wait(), etc.) o cuando el Thread esta bloqueado por I/O. No hay mas Green Threads desde la versión 1.2, todos los thread son Native Thread. Este tipo de hilos era controlado por la JVM.  Native Threads: Pueden cambiar de contexto desde un Thread hasta otro en cualquier momento. Este tipo de Thread son controlado por el sistema operativo. Java advanced programming
  • 3. Prioridades  Cada thread puede tener una prioridad diferente.  Cada thread tendrá la misma prioridad que su padre de manera inicial.  El scheduler elige el hilo con mayor prioridad, si hubiera hilos con igual prioridad usa la estrategia FIFO(First Input, First Output) para seleccionar el hilo  El algoritmo de selección va a depender del SO.  JDK soporta 10 niveles de prioridad, se aconseja usar los niveles predefinidos ya que cada SO en realidad tiene su propio rango. Si intentamos asignar un numero que no este entre 1 y 10 recibiremos una exception. - java.lang.Thread.MIN_PRIORITY = 1 - java.lang.Thread.NORM_PRIORITY = 5 - java.lang.Thread.MAX_PRIORITY = 10 Java advanced programming
  • 4. Metodo setPriority() Para establecer la prioridad de un thread se utiliza el método setPriority().  Las prioridades van desde 1 hasta 10.  Cada thread se crea con la misma prioridad que su padre.  Si ponemos un valor diferente obtendremos una exception.  La prioridad tiene que ser asignada antes de llamar al método start() sino no tendrá efecto. Java advanced programming
  • 5. Race Condition Java advanced programming Hablamos de Race Condicion (O Condición de carrera) cuando el resultado de una operación depende del orden de ejecución. Esto se debe a la falta de sincronización de ciertas operaciones lo cual conduce a este tipo de resultados, en estos casos hablamos de indeterminismo. Un ejemplo sencillo es el incremento de una variable entera desde dos thread de forma concurrentes, dado que el incremento no es una operación atómica puede suceder que estos threads se pisen entre si y solo uno realice el incremento.
  • 6. Synchronized Java advanced programming Cuando se utiliza la palabra clave synchronized se esta indicando una zona restringida para el uso de Threads, esta zona restringida para efectos prácticos puede ser considerada un candado (“lock”) sobre la instancia del objeto en cuestión. Lo anterior implica que si es invocado un método synchronized únicamente el Thread que lo invoca tiene acceso a la instancia del objeto, y cualquier otro Thread que intente acceder a esta misma instancia tendrá que esperar hasta que sea terminada la ejecución del método synchronized. Cuando la instancia tiene mas de un método syncronized los llamados sobre cualquier otro método syncronized deben esperar. El synchronized puede ser a en diferentes niveles - Métodos de instancia - Métodos de clase - Sobre un objeto
  • 7. Metodos notify() y notifyAll() Java advanced programming  wait(): Le indica al hilo en curso que abandone el monitor y se vaya a dormir hasta que otro hilo llame a notify() o notifyAll(). El método wait puede recibir la cantidad de tiempo máxima que debe esperar, si ejecutamos wait(0) es lo mismo que decir infinito o sea hasta que alguien llame al notify.  notify(): Despierta a alguno de los hilo que realizó una llamada a wait sobre el mismo objeto. No esta garantizado que hilo se despierta.  notifyAll(): Despierta todos los hilos que realizaron una llamada a wait sobre el mismo objeto. Estos tres métodos deben ser llamados dentro de un contexto sincronizado sino arrojan la exception "java.lang.IllegalMonitorStateException". Estos métodos pertenecen a la clase Object.
  • 8. Deadlock  Es el bloqueo permanente de un conjunto de procesos o hilos de ejecución en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos. A diferencia de otros problemas de concurrencia de procesos, no existe una solución general para los interbloqueos. Java advanced programming
  • 9. Livelock  Un livelock es una situación en la que dos o más threads se bloquean entre sí, respondiendo a una acción que es causada por otro hilo. En contraste con una situación de bloqueo, en la que dos o más threads esperan en un estado específico, los threads que participan en un livelock cambian su estado de manera que se impide el progreso en su tarea. Java advanced programming
  • 10. Starvation  Nos referimos a Starvation cuando un thread no es capaz de adquirir acceso a un recurso para ejecutar progreso en su tarea. Esto sucede cuando un recurso compartido no esta disponible por periodos largos debido a que hay otros "greedy" threads. Java advanced programming
  • 11. Fair locks  Un fair lock tiene en cuenta el time waiting de los threads que esperan sobre un lock cuando tiene que seleccionar el siguiente thread. Java advanced programming
  • 12. Thread-Safe  Una función (o método) Thread-safe puede ser invocada por múltiples hilos de ejecución sin preocuparnos de que los datos a los que accede dicha función (o método) sean corrompidos por alguno de los hilos ya que se asegura la atomicidad de la operación, es decir, la función se ejecuta de forma serializada sin interrupciones, por lo general, adquiriendo un mutex (Bloqueo de exclusión mutua). Java advanced programming
  • 13. Metodo interrupt() Java advanced programming El método interrupt() sirve para interrumpir un thread, si este estuviera en estado blocked (Ya sea por wait(), join(), sleep() , etc) arrojaría la exception java.lang.InterruptedException. Este método es usado cuando queremos detener la ejecución de un Thread. Es un método de instancia.
  • 14. Metodos Java advanced programming Clase Object Clase Thread Interfaz Runnable Deprecado Estatico wait() start() run() NO notify() join() NO notifyAll() setPriority() NO setName() NO isAlive() NO isInterrupted() NO isDaemon() NO yield() SI sleep() SI stop() SI NO suspend() SI NO resume() SI NO
  • 15. User Threads VS Daemon Threads Java advanced programming  User Thread: Corresponden a los hilos que se ejecutan en primer plano notificando el fín de su ejecución al usuario.  Daemon: Son aquellos hilos que se realizan en background (Segundo plano), tareas que no forman parte de la esencia de un programa y que se están ejecutando mientras no se finalice la aplicación. La JVM va a seguir viva mientras que existan User Threads, el método main es un User Thread.